jquery php表单验证复选框

时间:2011-10-14 12:23:47

标签: jquery forms checkbox

    <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验证),然后点击复选框,上面的代码仍能正常工作。

但是,如果我提交带有复选框CHECKED的表单(并且表单中的其他内容未通过我的php验证),然后单击复选框,无论是取消选中还是选中它都只是警告“已检查”。

我猜这是因为我已经在输入中设置了php代码以回显'checked =“checked”',但是我无法想办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

您想要更改确定元素是否为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指的是复选框的当前状态,其行为与您希望的一样。无论是否在文档加载时检查了复选框,它都会返回是否选中 now 复选框。

jQuery与$.attr('checked')是否跨版本返回属性或属性不一致,这是一个微妙的区别。详细信息可在documentation

中找到

jquery 1.6.3和1.6.4中的a bug进一步混淆了这一点,它在$(checkbox).attr('checked')之后返回$(checkbox).click()的陈旧值。

总之,如果您想确保获得复选框的当前状态,请使用is(':checked')来电或prop('checked')来电。