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



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



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


или



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

4 ответов:

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, the .опора() метод дает возможность явно получить значения свойств, в то время как .attr () извлекает атрибуты.

узнать больше...

Comments

    Ничего не найдено.