Вы хотите изменить способ определения, является ли элемент checked
:
$('#additionalDonationCheckbox').click(
function()
{
$(this).is(':checked') ? alert('checked') : alert('unchecked');
}
);
Или
$('#additionalDonationCheckbox').click(
function()
{
$(this).prop('checked') ? alert('checked') : alert('unchecked');
}
);
Это потому, что checked
является как свойством DOM, так и атрибутом DOM. Разница между ними может быть важной в некоторых ситуациях (например, такой).
Атрибут DOM checked
относится к начальному состоянию флажка. Поэтому, если флажок был создан с помощью checked="checked"
, атрибут DOM checked
всегда будет возвращать 'checked'
, даже если с тех пор флажок не был установлен.
Свойство DOM checked
относится к текущему состоянию флажка и ведет себя так, как вы этого хотите. Он вернет, установлен ли флажок сейчас независимо от того, был ли он установлен при загрузке документа.
Это тонкое различие, сбитое с толку тем, что jQuery не согласуется с тем, возвращает ли $.attr('checked')
атрибут или свойство в разных версиях. Подробности можно найти в документации .
Это далее путает ошибка в jquery 1.6.3 и 1.6.4, которая возвращает устаревшее значение для $(checkbox).attr('checked')
после $(checkbox).click()
.
В итоге, если вы хотите быть уверенным, что вы получаете текущее состояние флажка, используйте либо вызов is(':checked')
, либо вызов prop('checked')
.