2011-05-31 6 views
5

Durante la gestione del mio sito web creo nuovi div usando jquery con la classe "a". Ho definito una funzione click() per "a" classe come segue:click() funzione jquery non disponibile su nuove div

$(document).ready(function() { 
    $(".a").click(function(){ 
     $(".a").hide(); 
    }); 
}); 

Il problema è che le nuove div creati con la stessa classe di non chiamare questa funzione quando si fa clic. Altre div con classe "a" che ci sono all'inizio fanno. Che cosa sto facendo di sbagliato?

risposta

4
$(document).delegate('.a', 'click', function() { 
    $(this).hide(); 
}); 
+0

Eccellente, grazie! – Nayish

+1

+1 per usare 'delegate()' invece di 'live()', anche se in questo caso difficilmente differiscono. –

+1

È importante notare che il selettore chiamato '.delegate' dovrebbe essere il più vicino possibile a un delegato. –

3

Provare a utilizzare la funzione .live() che dovrebbe valere anche per gli elementi DOM appena inseriti che corrispondono alla vostra selettore:

$(document).ready(function() { 
    $(".a").live('click', function(){ 
     $(".a").hide(); 
    }); 
}); 
+2

Si prega di non supportare l'uso di 'live()'. E 'stato un errore sfortunato. Per favore usa 'delegate()'; -1 –

+0

Questo mi ha mandato a-Googling, che ha sollevato questa domanda e ho risposto sul perché 'delegate()' può essere migliore di 'live()': http://stackoverflow.com/questions/4204316/jquery-live- vs-delegate – marramgrass

-1

Utilizzare il metodo "dal vivo".

http://api.jquery.com/live/

+1

Si prega di non supportare l'uso di 'live()'. E 'stato un errore sfortunato. Per favore usa 'delegate()'; -1 –

2

Questo potrebbe anche funzionare.

(function($) { 
    $(document).ready(function() { 
    $('body').on('click', '.a', function() { 
     $(this).hide(); 
    }); 
    }); 
}(jQuery)); 

.on() attacca gli eventi a controlli che sono entrambi presenti e non ancora presente.