.prop («проверено», false) или .removeAttr («проверено»)? - PullRequest
105 голосов
/ 29 мая 2011

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

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

или

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

Ответы [ 4 ]

113 голосов
/ 29 мая 2011

JQuery 3

Начиная с jQuery 3, removeAttr делает не для соответствующего свойства больше false:

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

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

Changelog

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


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

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

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

11 голосов
/ 03 марта 2014

use checked: true, false свойство флажка.

JQuery:

if($('input[type=checkbox]').is(':checked')) {
    $(this).prop('checked',true);
} else {
    $(this).prop('checked',false);
}
5 голосов
/ 08 апреля 2016

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

if ($(':checkbox').is(':checked')){
    $(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
    $(':checkbox').prop('checked', false).removeAttr('checked');
}
2 голосов
/ 24 июля 2014

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

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

или

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

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

Узнай больше ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...