2012-09-11 85 views
0

我現在有一個的document.ready塊以下元素:添加jQuery的事件處理程序與通配符的ID

 $("[id^=summaryDetailLink_]").each(function(index) { 
     var splitID = this.id.split("_"); 
     this.click(alert('clicked: '+splitID[1])); //toggleDetail(splitID[1]) 
    }); 

最終欲檢測何時被點擊與「summaryDetail_」的ID的TD和使用從TD.ID屬性獲取的ID觸發toggleDetail函數。

上面似乎會生成正確的ID(警報彈出窗口),但在頁面加載時觸發,而不是在單擊元素時觸發。

所以問題1號 - 爲什麼它會觸發頁面加載而不是創建處理程序來點擊每個元素並等待點擊?

問題2在閱讀這個問題時,似乎在表格上創建單個事件處理程序似乎更明智,而TD則確定哪個TD元素被點擊。我將如何轉換代碼來做到這一點?

回答

1

答到的第一個問題:

$(function() { 
    $("[id^=summaryDetailLink_]").click(function() { 
     var splitID = $(this).id.split("_"); 
     alert('clicked: '+splitID[1]) 
    }); 
} 

回答第二個問題,你可以這樣做:

$('table#yourtable').on('click', '[id^=summaryDetailLink_]', function(e) { 
    var splitID = $(this).id.split("_"); 
    alert('clicked: '+splitID[1]) 
}); 
+0

在代碼中將「$(this)」更改爲「this」之後,它完美地工作。謝謝。 – DaFoot

1

我想你誤會單擊處理程序是如何工作的:

$(function() { 
    $("[id^=summaryDetailLink_]").click(function() { 
     var splitID = $(this).id.split("_"); 
     alert('clicked: '+splitID[1]) 
    }); 
} 
相關問題