2012-02-14 123 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); 
});