С внедрением метода prop теперь мне нужно знать принятый способ снятия флажка. Это:
$('input').filter(':checkbox').removeAttr('checked');
или
$('input').filter(':checkbox').prop('checked',false);
С внедрением метода prop теперь мне нужно знать принятый способ снятия флажка. Это:
$('input').filter(':checkbox').removeAttr('checked');
или
$('input').filter(':checkbox').prop('checked',false);
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, чтобы сделать это.
используйте checked: true, false свойство флажка.
JQuery
if($('input[type=checkbox]').is(':checked')) {
$(this).prop('checked',true);
} else {
$(this).prop('checked',false);
}
Я рекомендую использовать оба, prop и attr, потому что у меня были проблемы с Chrome, и я решил его использовать обе функции.
if ($(':checkbox').is(':checked')){
$(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
$(':checkbox').prop('checked', false).removeAttr('checked');
}
Другой альтернативой делать то же самое - фильтровать атрибут type = checkbox:
$('input[type="checkbox"]').removeAttr('checked');
или
$('input[type="checkbox"]').prop('checked' , false);
Помните, что разница между атрибутами и свойствами может быть важна в конкретных ситуациях. Прежде чем jQuery 1.6, метод .attr() иногда учитывал значения свойств при извлечении некоторых атрибутов, что может привести к непоследовательному поведению. Начиная с jQuery 1.6, метод .prop() предоставляет способ явно извлекать значения свойств, в то время как .attr() извлекает атрибуты.
Знать больше...