2011-10-14 53 views
0
<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'); 
    } 
); 

我有一个表单,并且在我提交之前,如果我点击复选框,它将提醒'checked'(如果选中)并且'unchecked'(如果未选中)。jquery php表单验证复选框

如果我提交表单未选中的复选框,(和表单中的其他内容未通过我的PHP验证),然后单击复选框,上述仍然正常工作。但是,如果我提交表单的复选框CHECKED,(和其他表单中的失败我的PHP验证),然后单击复选框,无论是未选中或检查它只是提醒'检查'。

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

回答

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指的是当前复选框的状态,其行为与您希望的相同。无论是否在加载文档时检查复选框,它都会返回现在

这是一个微妙的区别,因为jQuery不一致的是$.attr('checked')是否跨版本返回属性或属性。详情请见documentation

在jquery 1.6.3和1.6.4中,这被a bug弄得更加困惑,它在$(checkbox).click()之后返回$(checkbox).attr('checked')的陈旧值。

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

+0

是的,这也通过验证客户端消除了不必要的http请求。你应该总是做基本的表单验证客户端。 – Tules

+0

是的,我会做两个。上面的代码实际上是用来显示某些字段集,具体取决于是否勾选了一个复选框。如果javascript被禁用,那么字段集将自动显示而不显示复选框。 – callumander