флажок проверки формы PHP - PullRequest
0 голосов
/ 14 октября 2011
    <input type="checkbox" class="christmasCheckBox" name="additionalDonationCheckbox" value="yes" id="additionalDonationCheckbox" 
<?php echo (isset($_POST['additionalDonationCheckbox'])&&($_POST['additionalDonationCheckbox']!='')) ? 'checked="checked"' : ''; ?> />



$('#additionalDonationCheckbox').click(
    function()
    {
        ($(this).attr('checked')) ? alert('checked') : alert('unchecked');
    }
);

У меня есть форма, и, прежде чем я отправлю ее, если я нажму на флажок, она выдаст уведомление «проверено», если отмечено, и «не отмечено», если не отмечено.

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

Однако, если я отправляю форму с флажком ПРОВЕРЕНО (и что-то еще вформа не проходит мою проверку php) и затем установите флажок, независимо от того, отмечен ли он или проверен, он просто предупреждает «проверено».

Я предполагаю, что это потому, что я установил код php на входе echo 'Check = "Check", но я не могу обойти это?

1 Ответ

1 голос
/ 14 октября 2011

Вы хотите изменить способ определения, является ли элемент 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').

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