JQuery проверки и снятия флажков

Я должен проверить и снять флажки. Но это не работает хорошо.

Пример: когда статус активен на 1-й загрузке:

  • Снятие флажков в неактивных (работает нормально)
  • Повторная проверка, чтобы сделать его активным (не работает, остается без галочки)

Пример: когда статус неактивен при первой загрузке:

  • Флажки в активном (работает нормально)
  • Снятие флажков в неактивных (работает нормально)
  • Повторная проверка, чтобы сделать его активным (не работает, остается без галочки)

Вот мой пример кода:

var statusCheck = $('.status-box');

$.ajax({
    url: 'sample/url',
    type: 'POST',
    data: {
        user_id: ids,
        status: statusVal
    },
    success: function (response) {
        if (response == 'ok') {
            $.each(statusCheck, function () {
                var _this = $(this);

                if (_this.is(':checked')) {
                    _this.removeAttr('checked');
                } else {
                    _this.attr('checked', '');
                }
            });
        }
    }
});

2 ответа

Решение

У меня были проблемы (странные аномалии) с установкой и снятием флажков в JQuery. Я использовал .attr а также .removeAttr и когда я изменил его на .prop('checked',false/true) Я решил проблему.

До версии jQuery 1.6 метод.attr() иногда учитывал значения свойств при извлечении некоторых атрибутов, что могло вызвать противоречивое поведение. Начиная с jQuery 1.6, метод.prop() предоставляет способ явного получения значений свойств, в то время как.attr() возвращает атрибуты. Ссылка:

Обратите внимание, что вы должны использовать JQuery 1.6 +,

var statusCheck = $('.status-box')

$.ajax({
        url     : 'sample/url',
        type    : 'POST',
        data    : { user_id: ids, status: statusVal },
        success : function( response ) {
            if( response == 'ok' ) {
                $.each(statusCheck, function(){
                    var _this    = $(this);

                    if( _this.is(':checked') ) {
                        _this.removeAttr('checked');
                    } else {
                        _this.attr('checked', 'checked');
                             // ...............^ here ^
                    }
                });
            }
        }
    });

Попробуй это: _this.attr('checked', 'checked');

Также .prop() из этой ссылки может творить чудеса;)

Другие вопросы по тегам