为什么Jquery点击事件没有被触发?

时间:2011-01-24 11:56:16

标签: javascript jquery javascript-events

我有一组ID为somename的复选框,我希望抓住这些复选框的点击事件。以前我通过jquery做到了这一点。即$("input[id^='somename']").click(function(){ // my code follows here }) 但这次不行。为什么呢?

P.S。在发出一些ajax请求后,在页面完全加载后,通过javascript创建元素。我不知道这可能是问题吗?

5 个答案:

答案 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()。请阅读:

.live().delegate()

答案 2 :(得分:1)

使用标准绑定函数仅适用于绑定时存在的元素。您需要使用称为事件委派的东西,其中DOM树上的元素会被通知后代元素上的事件。最好的方法是使用.delegate()

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

这假设您有一个元素#containingElement,其中包含您要捕获事件的所有元素。

注意其他答案推荐livelivedelegate使用相同的后端代码,但出于各种原因,delegate效率更高。

答案 3 :(得分:1)

我相信因为你想要将这个应用到DOM中动态创建的元素,你将不得不使用jQuery。live()方法:

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

答案 4 :(得分:0)

而不是.click()尝试.change()事件。