我有一组ID为somename
的复选框,我希望抓住这些复选框的点击事件。以前我通过jquery做到了这一点。即$("input[id^='somename']").click(function(){
// my code follows here
})
但这次不行。为什么呢?
P.S。在发出一些ajax请求后,在页面完全加载后,通过javascript创建元素。我不知道这可能是问题吗?
答案 0 :(得分: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 })
代替?
答案 1 :(得分:1)
这确实可能是问题所在。将.click
替换为.live()
$("input[id^='somename']").live('click', function(){ // my code follows here })
你应该没事。
由于对.click
的调用只是.bind('click', fnc)
的快捷方式,如果在调用此元素时元素不在DOM中,则无效。比使用.live()
更好的方法是使用.delegate()
。请阅读:
答案 2 :(得分:1)
使用标准绑定函数仅适用于绑定时存在的元素。您需要使用称为事件委派的东西,其中DOM树上的元素会被通知后代元素上的事件。最好的方法是使用.delegate()
:
$('#containingElement').delegate("input[id^='somename']", 'click', function(){
// your code here
});
这假设您有一个元素#containingElement
,其中包含您要捕获事件的所有元素。
注意其他答案推荐live
。 live
和delegate
使用相同的后端代码,但出于各种原因,delegate
效率更高。
答案 3 :(得分:1)
我相信因为你想要将这个应用到DOM中动态创建的元素,你将不得不使用jQuery。live()方法:
$("input[id^='somename']").live('click', function(e) {
// Your code
});
答案 4 :(得分:0)
而不是.click()
尝试.change()
事件。