2012-02-14 130 views
31

该主题是相当描述我的问题,我假设它不会这样工作,有没有办法让它工作? (解决方法)?jQuery点击()事件没有射击AJAX加载的HTML元素

这里是通过AJAX加载代码:

<div> 
<div id="s0frame" class="sframe"></div> 
<div id="s1frame" class="sframe"></div> 
<div id="s2frame" class="sframe"></div> 
<div id="s3frame" class="sframe"></div> 
<div id="s4frame" class="sframe"></div> 
<div id="s5frame" class="sframe"></div> 
<div id="chatframe" class="chat alpha60"></div> 
</div> 

这里是我的单击事件:

$('.sframe').bind('click', function() { 
    var seat_number = this.id.match(/\d/g); 
    alert(seat_number); 
}); 

回答

77

做到这一点。

$(document).on("click",".sframe",function(e){ 
var seat_number = this.id.match(/\d/g); 
alert(seat_number); 
}); 

$(document).delegate(".sframe","click",function(e){ 
var seat_number = this.id.match(/\d/g); 
alert(seat_number); 

}); 

编辑:

在jQuery 1.7的,所述.live()方法被弃用。使用.on()附加事件处理程序。老版本的jQuery用户应该使用.delegate()。

+5

'.live()'从jQuery 1.7开始被弃用,所以使用替换为'.on()'的更新版本 – NightHawk 2012-02-14 06:09:52

+0

谢谢你的工作很棒,因为你先回答我会选择你! – 2012-02-14 06:10:24

+0

噢好吧,我会尝试() – 2012-02-14 06:10:40

4

除非你是标记加载到后调用该.bind()函数(),或者最好使用jQuery的最新版本.on(),因为.bind()仅针对运行时已存在的DOM元素,而.live()和.on() )为跟踪添加到页面的元素提供了不同的范围选项。

+1

谢谢你的解释! – 2012-02-14 06:10:54

14

您必须将事件处理程序重新附加到DOM中的动态添加元素。方法被广泛使用,但现在已被弃用。在jQuery的版本1.7+可以使用.on或者你也可以使用委托

$(document).delegate(".sframe","click",function(e){ 

}); 
使用 .delegate

$(document).on("click",".sframe",function(e){ 

}); 

+3

+1为问题 – kapa 2012-02-14 08:45:25

+0

提供正确答案,这非常有帮助。 – 2016-10-06 21:38:40

+0

谢谢@ 3nigma。第一种方法完美地工作。 – 2017-06-22 19:31:37

2
$(document).on('click','sframe', function() { 
    var seat_number = this.id.match(/\d/g); 
    alert(seat_number); 
}); 
相关问题