2014-11-06 85 views
0

在我的JavaScript文件中的代碼是JavaScript複選框被選中問題與觸發

$(document).ready(function() { 
    $("input:checkbox[id^='chkbox_']").on('click',function(){ 
     var chkbox = $(this); 
     if(chkbox.is(':checked')){ 
      alert('In if'); 
     } else { 
      alert('In else'); 
     } 
    }); 
    $("#" + id).trigger('click'); 
}); 

此代碼給我In else

我不明白爲什麼,什麼是這個

+0

它做工精細,形成我http://jsfiddle.net/dy4uzn51/ – ekans 2014-11-06 09:23:52

+0

其做工精細!檢查這[鏈接](http://jsfiddle.net/vhvpL5z3/) – 2014-11-06 09:24:58

+0

@ekans它不與jquery 1.8.3 工作請檢查此鏈接http://jsfiddle.net/vhvpL5z3/4/ – 2014-11-06 09:43:17

回答

0

編輯解決方案:這個答案似乎是1.9左右,之前只適用於版本時,「錯誤」 seems to have been fixed

我也被這個問題所打動。原因是當你用鼠標點擊複選框時,首先設置它的狀態,然後執行它的點擊處理程序。如果使用jQuery觸發點擊,則首先執行點擊處理程序,然後再設置狀態。

一個解決方案是觸發原生javascript點擊處理程序,如下所示:checkbox[0].click(),它與jQuery的.click()/.trigger('click')的作用相同,但順序相反。

另一個是做checkbox.attr('checked', true).triggerHandler('click'),其中狀態設置爲第一,triggerHandler()只執行處理程序,而不是默認行爲(選中該框)。

無論點擊是真實還是觸發,兩種解決方案都應該允許您的代碼工作。

+0

謝謝我工作,並解釋這是一個很好的方式。 非常感謝@Peter Herdenborg – 2014-11-06 09:36:22

+0

很高興我能幫到你!但我認爲其他人聲稱它應該工作。也許他們是正確的,我的知識已經過時了。您可以嘗試升級jQuery。 – 2014-11-06 09:38:38

+0

我的jQuery版本是1.8.3,並沒有與那個工作。 – 2014-11-06 09:44:57

0

這可能是你的jQuery庫問題。或瀏覽器問題。它爲我工作很好。你可以最新的jquery 1.8以上。

click to view answerhttp://jsfiddle.net/dy4uzn51/2/