2012-03-12 15 views
9

Ho un div con class="tags" con un collegamento ipertestuale predefinito.

<div class="tags"> 
    <a href="#">myLink</a> 
</div> 

E ho la funzione per rimuovere quel collegamento ipertestuale se l'utente fa clic su di esso.

$('.tags a').click(function() { 
    $(this).remove(); 
    return false; 
}); 

E questo funziona con collegamenti ipertestuali predefiniti. Se aggiungo un altro legame con l'aiuto di jQuery (dopo che la pagina viene caricata)

$('.tags').append('<a href="#">newLink</a>'); 

funzione per rimuovere collegamento ipertestuale (al clic) non sarà chiamato su questi, i collegamenti aggiunti. Come risolvere questo?

risposta

4

è necessario utilizzare la funzione di live-:

$(".tags a").live("click", function() { 
    // ... 
}); 

Perché si stanno aggiungendo i link dopo il caricamento iniziale, l'evento click norma non verrà rilegato ai collegamenti aggiunti dinamici.

+19

** Nota ** che ['live()'] (http://api.jquery.com/live) è stato ammortizzato dal 1.7. È consigliabile utilizzare ['on()'] (http://api.jquery.com/on) da ora in poi. La chiamata tradotta sarebbe '$ (document) .on ('click', '.tags a', function() {/ * foo * /});' – Matt

+0

Grazie. Dovrei usarlo su tutti i miei clic/azioni simili o solo quando veramente necessario? – svenkapudija

+1

Per la performance, guarda questa risposta: http://stackoverflow.com/questions/6047193/liveclick-and-performance Personalmente preferisco usare l'evento click e utilizzare solo l'evento dal vivo se davvero ne ha bisogno, poiché è chiaro che ci saranno elementi aggiunti dinamici. – kufi

0

L'evento click è collegato solo all'elemento dom corrente non a elemento futuro. Se si desidera aggiungere questo evento a tutti gli elementi include futuro, è necessario utilizzare l'evento live in jquery. http://jsfiddle.net/6cGvt/

+5

** Nota ** che ['live()'] (http://api.jquery.com/live) è stato deprezzato dal 1.7. È consigliabile utilizzare ['on()'] (http://api.jquery.com/on) da ora in poi. La chiamata tradotta sarebbe '$ (document) .on ('click', '.tags a', function() {/ * foo * /});' – Matt

+0

Yup, ... Per l'ultima versione in jQuery. usare il metodo ON – sandeep