.prop('checked', false) или .removeAttr('checked')?

С внедрением метода prop теперь мне нужно знать принятый способ снятия флажка. Это:

$('input').filter(':checkbox').removeAttr('checked');

или

$('input').filter(':checkbox').prop('checked',false);

Ответ 1

jQuery 3

Как и в jQuery 3, removeAttr больше не задает соответствующее свойство false:

До jQuery 3.0 с помощью .removeAttr() по логическому атрибуту, например checked, selected или readonly, также будет установлено соответствующее именованное свойство false. Это поведение требовалось для древних версий Internet Explorer, но не подходит для современных браузеров, потому что атрибут представляет начальное значение, а свойство представляет текущее (динамическое) значение.

Почти всегда ошибка использования .removeAttr( "checked" ) в элементе DOM. Единственный раз, когда это может быть полезно, - если позже DOM будет сериализован обратно в строку HTML. Во всех остальных случаях вместо этого следует использовать .prop( "checked", false ).

Список изменений

Следовательно, только .prop('checked',false) является правильным способом при использовании этой версии.


Оригинальный ответ (с 2011 года):

Для атрибутов, имеющих базовые логические свойства (из которых checked - один), removeAttr автоматически устанавливает базовое свойство в false. (Обратите внимание, что это относится к исправлениям обратной совместимости, добавленным в jQuery 1.6.1).

Итак, либо сработает... но второй пример, который вы дали (используя prop), является более правильным из этих двух. Если ваша цель - снять флажок, вы действительно хотите повлиять на свойство, а не на атрибут, и нет необходимости проходить через removeAttr, чтобы сделать это.

Ответ 2

используйте checked: true, false свойство флажка.

JQuery

if($('input[type=checkbox]').is(':checked')) {
    $(this).prop('checked',true);
} else {
    $(this).prop('checked',false);
}

Ответ 3

Я рекомендую использовать оба, prop и attr, потому что у меня были проблемы с Chrome, и я решил его использовать обе функции.

if ($(':checkbox').is(':checked')){
    $(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
    $(':checkbox').prop('checked', false).removeAttr('checked');
}

Ответ 4

Другой альтернативой делать то же самое - фильтровать атрибут type = checkbox:

$('input[type="checkbox"]').removeAttr('checked');

или

$('input[type="checkbox"]').prop('checked' , false);

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

Знать больше...