2012-01-13 13 views
6

ho qualche codice come questo:Impossibile impostare clicca gestore di eventi su contenuti creati dinamicamente

$('.play').on('click', function(){ 
    console.log('click'); 
}); 

L'elemento .play viene creato dinamicamente con $('.game').html('<span class="paly">Play</span>') metodo. Tuttavia, non ho nulla nel log della mia console quando clicco su questo intervallo. Che cosa sto facendo di sbagliato?

Grazie.

PS: Sto usando jQuery 1.7.1

+1

[questa risposta] (http://stackoverflow.com/a/8774734/1114171) può aiutare, credo che stai usando 'on()' come 'bind()' non come 'on() ' –

risposta

12

Non utilizzare live() - è stato deprecato. Invece utilizzare on(), ma utilizzarlo su un elemento padre di delegare l'evento, in questo modo:

$('#parentOfPlay').on('click', '.play', function(){ 
    console.log('click'); 
}); 
+0

Quello sarebbe l'altro in giro: '$ (" # parentOfPlay "). On (" click "," .play ", function() {});' . –

+0

@ FrédéricHamidi Sì, mi sono appena accorto - modificato. Grazie. –

+1

Sì, questo è il trucco. Se ho ragione ho bisogno di usare $ (document) .on con contenuto dinamico un $ ('. Selector'). On con contenuto non dinamico, giusto? – bbrodriges

-2

Prova questa:

$('.play').live('click', function(){ 
    console.log('click'); 
}); 
-2

Sei sicuro l'elemento ".play" è già lì quando si esegue il codice? O forse è stato creato solo più tardi nel codice .. Potrebbe essere un problema di ordinazioni.

Edit: Se si desidera dinamica, utilizzare 'live' invece di 'come suggerito da altri :)

-1

Prova con

$(document).on('click', '.play' 
    function(){ 
     console.log('click'); 
}); 
+0

' .live() 'è deprecato e deve essere evitato. Usa '.on()' o '.delegate()' –

1

È possibile utilizzare dal vivo (che ora è deprecato in 1.7 .1 quindi non dovresti davvero usarlo) o farlo con on, ma tu dove stai 'on' sbagliato.

$(document).on('click', '.play', function(){ 
    console.log('click'); 
}); 
0

Ecco una buona ripartizione di cosa usare e quando. https://stackoverflow.com/a/8845306/1139444

.on vi darà l'effetto che si sta cercando, ma è necessario farlo sul selettore del documento e mettere il selettore di classe nella chiamata .on.

$(document).on('click', '.play', function(){ 
    console.log('click'); 
}); 
0

il selettore .play è alla ricerca di un contenitore con quella classe, quindi avrai bisogno di generare il codice con:

$('.game').html('<span class="play">Play</span>'); 
0

.html() definisce il contenuto di tutti i blocchi che hanno un gioco di classe di nome giocare. Non hai creato alcuna classe .play quindi il rendimento $(".play") non produce nulla. La funzione click non è vincolata a nulla e non viene mostrato nulla sulla console. Prova a fare $(".game").on("click",function(){});

Problemi correlati