2011-01-24 268 views
0

我有一組ID爲somename的複選框,我想捕獲這些複選框的單擊事件。以前我通過jquery完成了這個任務。即$("input[id^='somename']").click(function(){ // my code follows here }) ,但這次不適用。爲什麼?爲什麼jquery點擊事件沒有被觸發?

P.S.在完成一些Ajax請求後頁面完全加載後,通過javascript創建該元素。我不知道這可能是問題嗎?

回答

2

只使用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 }) 

呢?

+0

完美的作品...謝謝.. – 2011-01-24 12:03:09

+0

+1一個正確的答案,並提的是,你不希望使用的ID此。 – Exelian 2011-01-24 12:04:34

0

而不是.click()嘗試.change()事件。

1

這確實可能是問題所在。與.live()

$("input[id^='somename']").live('click', function(){ // my code follows here }) 

更換.click和你應該罰款。
由於對.click的調用只是.bind('click', fnc)的快捷方式,因此在調用此元素時,如果該元素不在DOM中,則不起作用。比使用.live()更好的是使用.delegate()。有一個讀:

.live().delegate()

1

採用標準約束力的功能僅適用於存在在綁定的時間要素。你需要使用一個叫做事件委託的東西,在後面的元素上通知DOM樹上的元素。要做到這一點,最好的辦法是.delegate()

$('#containingElement').delegate("input[id^='somename']", 'click', function(){ 
    // your code here 
}); 

這是假設你有一個包含所有你想要捕捉的事件元素的元素#containingElement

注意其他答案的評論livelivedelegate使用相同的後端代碼,但由於各種原因delegate更高效。

1

我相信因爲你希望它適用於DOM中動態創建的元素,你將不得不使用jQuery。 live()方法:

$("input[id^='somename']").live('click', function(e) { 
    // Your code 
});