2012-02-14 10 views
31

il soggetto è piuttosto descrittivo del mio problema, presumo che non funzionerà in questo modo, c'è un modo per farlo funzionare? (Soluzione)?jQuery click() evento non attivato su elementi HTML caricati con AJAX

Qui è il codice che viene caricato tramite la tecnologia 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> 

Ecco il mio evento click:

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

risposta

77

Fare questo.

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

o

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

}); 

Edit:

Come di jQuery 1.7, il metodo .Live() è deprecato. Usa .on() per allegare gestori di eventi. Gli utenti di versioni precedenti di jQuery dovrebbero usare .delegate().

+5

'.live()' è deprecato da jQuery 1.7, quindi usa il suo sostitutivo '.on()' per le versioni più recenti – NightHawk

+0

Grazie a te funziona alla grande, dato che hai risposto per primo ti sceglierò! –

+0

Oh ok, ci proverò() –

4

A meno che non si sta chiamando quella funzione .bind() dopo che il markup è caricato su nella pagina, è necessario utilizzare un'altra funzione come .live() o preferibilmente se si utilizza una versione recente di jQuery, .on() perché .bind() sceglie solo gli elementi DOM già presenti durante l'esecuzione mentre .live() e .on () ti offre diverse opzioni di ambito per tenere traccia degli elementi aggiunti alla pagina.

+1

Grazie per la spiegazione! –

14

devi riattaccare i gestori di eventi agli elementi aggiunti dinamicamente nel DOM. Il metodo .live è stato ampiamente utilizzato, ma ora è deprecato. Nella versione jQuery 1.7+ è possibile utilizzare .on o in alternativa è possibile utilizzare .delegate

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

}); 

utilizzando delegato

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

}); 
+3

+1 per aver fornito la risposta giusta alla domanda – kapa

+0

questo è stato molto utile. –

+0

Grazie @ 3nigma. Il primo metodo ha funzionato perfettamente. –

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