事件考慮下面的代碼(http://jsfiddle.net/FW36F/1/):火上input.checked =真/假_without_ jQuery的
<input type="checkbox" onchange="alert(this.checked)">
<button onclick="document.getElementsByTagName('input')[0].checked=!document.getElementsByTagName('input')[0].checked;">toggle</button>
如果單擊該複選框,你會得到一個警告,告訴你,如果它檢查與否。大。但是,如果您單擊切換按鈕,則該複選框將更改它的選中狀態,但不會觸發onchange事件。
本質上,只有當用戶實際點擊複選框而不是時,如果通過JavaScript更改了複選框,則複選框的onchange纔會觸發。在IE,FF和Chrome中都是如此。看起來這種行爲也適用於規範。
但是,如果出於任何原因,我確實需要某種事件觸發複選框的選中狀態更改。這可能嗎?
噢,和jQuery不允許。並請不要setTimeout/setInterval的解決方案要麼...
更新:此外,我應該說清楚,上面的代碼僅用於說明。在真實代碼中,我們需要確保複選框的狀態被選中或不選中 - 而不僅僅是切換它。或許,這將是更好的代碼來說明:
<input type="checkbox" onchange="alert(this.checked)">
<button onclick="document.getElementsByTagName('input')[0].checked=true;">check</button>
<button onclick="document.getElementsByTagName('input')[0].checked=false;">un check</button>
而且,有可能是在其他地區代碼,我們不能完全控制,這可能會做一個簡單的.checked =真/假 - 我們想以確保我們也看到了。
jQuery的將不只是放火本機更改事件它的值 –
超時有什麼問題?我不認爲有任何其他的工作。 – Jivings
@Jivings:我不敢相信你真的問過輪詢使用超時有什麼問題。這就像扔掉週期一樣,並在收到通知時增加延遲。延遲越少,CPU浪費越多。這裏有很多答案可以滿足OP的要求 –