我有一組ID爲somename
的複選框,我想捕獲這些複選框的單擊事件。以前我通過jquery完成了這個任務。即$("input[id^='somename']").click(function(){ // my code follows here })
,但這次不適用。爲什麼?爲什麼jquery點擊事件沒有被觸發?
P.S.在完成一些Ajax請求後頁面完全加載後,通過javascript創建該元素。我不知道這可能是問題嗎?
我有一組ID爲somename
的複選框,我想捕獲這些複選框的單擊事件。以前我通過jquery完成了這個任務。即$("input[id^='somename']").click(function(){ // my code follows here })
,但這次不適用。爲什麼?爲什麼jquery點擊事件沒有被觸發?
P.S.在完成一些Ajax請求後頁面完全加載後,通過javascript創建該元素。我不知道這可能是問題嗎?
只使用live
如果元素是在頁面加載後創建的。
$("input[id^='somename']").live('click', function(){ // my code follows here })
P.S:您的搜索選擇是 「somename」,但您搜索它的屬性ID,你確定你不想:
$("input[name^='somename']").live('click', function(){ // my code follows here })
呢?
而不是.click()
嘗試.change()
事件。
這確實可能是問題所在。與.live()
$("input[id^='somename']").live('click', function(){ // my code follows here })
更換.click
和你應該罰款。
由於對.click
的調用只是.bind('click', fnc)
的快捷方式,因此在調用此元素時,如果該元素不在DOM中,則不起作用。比使用.live()
更好的是使用.delegate()
。有一個讀:
採用標準約束力的功能僅適用於存在在綁定的時間要素。你需要使用一個叫做事件委託的東西,在後面的元素上通知DOM樹上的元素。要做到這一點,最好的辦法是.delegate()
:
$('#containingElement').delegate("input[id^='somename']", 'click', function(){
// your code here
});
這是假設你有一個包含所有你想要捕捉的事件元素的元素#containingElement
。
注意其他答案的評論live
。 live
和delegate
使用相同的後端代碼,但由於各種原因delegate
更高效。
我相信因爲你希望它適用於DOM中動態創建的元素,你將不得不使用jQuery。 live()方法:
$("input[id^='somename']").live('click', function(e) {
// Your code
});
完美的作品...謝謝.. – 2011-01-24 12:03:09
+1一個正確的答案,並提的是,你不希望使用的ID此。 – Exelian 2011-01-24 12:04:34