С внедрением метода 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() извлекает атрибуты.
Знать больше...