2011-10-14 138 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