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