2012-02-22 16 views
9

Io uso la funzione accodare per non aggiungere un po 'div in un altro elementoaccesso elemento jQuery dopo la funzione di accodamento

('#test-append').append("<div class='new_div'><b>some text</b></div>") 

tutto sta andando bene e posso vedere il div aggiunto, `ma ho anche bisogno dopo che per l'accesso il selettore div al fine di fare qualcosa con questo div ad esempio per nasconderlo così uso la folowing

$('.new_div').click(function(){ 
      do somthing here 
     }); 

ma non sta funzionando, anche se mi basta usare semplice alert ('ciao') chiamata. Sembra jquery non riconosce la classe di aggiunta (ho anche provato con Id e ottengo lo stesso risultato)

Io apprezzo un certo aiuto su questo tema

Grazie

risposta

16

prima di jQuery 1.7 avete bisogno di usare dal vivo() o suo delegato() per associare eventi a elementi ignorando sia che esistevano al momento di legare o meno.

dal jQuery 1.7, è possibile utilizzare

$('root-element').on('click', 'selector', function() { do it }) 

sopra è editato secondo diaspri commenti

+2

Se jQuery 1.7 è incluso allora '.click (...)' esegue il mapping a '.on ('click', ...)' – Jasper

+0

'bind()' non usa la delega degli eventi quindi si collegherà solo agli elementi che sono attualmente nel DOM quando avviene l'associazione. E stai usando '.on()' come '.bind()' in modo che non deleghi neanche l'evento, per usare '.on()' deve essere in questo formato: '$ ('root- elemento '). on (' click ',' selector ', function() {do it}) '. – Jasper

+0

qualcuno cancella questa risposta schifosa ... @ jasper, grazie, forse dovresti postare quel commento come risposta? – mindandmedia

0

avrei probabilmente dichiarare prima il div poi usa append a.

var newDiv=$("<div class='new_div'><b>some text</b></div>"); 

newDiv.appendto('#test-append'); 

newDiv.click(function(){ do somthing here }); 
+0

L'ho provato ma non ha funzionato, l'hai provato? –

3

Si potrebbe aggiungere l'elemento, quindi selezionarlo in quanto sarà un elemento figlio della selezione originale:

$('#test-append').append("<div class='new_div'><b>some text</b></div>").children('.new_div').click(...); 

Oppure si potrebbe usare .appendTo() che aggiunge l'elemento (s), ma anche mantiene loro selezionati:

$("<div class='new_div'><b>some text</b></div>").appendTo('#test-append').click(...); 

O come altri hanno detto è possibile salvare un riferimento all'elemento in una variabile e quindi utilizzare tale variabile in un secondo momento per manipolare l'elem ent:

var $element = $("<div class='new_div'><b>some text</b></div>").appendTo('#test-append'); 
$element.click(...);//but you could have just chained the call like the previous example 
+0

Dopo diverse ore di debug non ho notato qualcosa di così semplice come ".appendTo() che aggiunge gli elementi ma li mantiene anche selezionati". Jasper hai davvero salvato la mia giornata! –

0

metodo Forse questo non è consigliabile ... ma funziona (jQuery 2.1.3)

$('.current_element').append("<div class='future_element'><b>some text</b></div>").find('.future_element').click(function(){ 
    console.log('you can see me if you click appended element'); 
}); 

e la versione quando ci aggiungiamo elemento al clic

$('.current_element').click(function(){ 
    $('body').append("<div class='future_element'>anything</div>"); 
    $('.future_element').click(function(){ 
     $(this).text('do something with appended element'); //for example 
    }); 
}); 
Problemi correlati