2009-05-02 4 views
17

Sono nuovo di JQuery, quindi portami con me :).jquery non vede nuovi elementi

Ho un problema semplice:

$(document).ready(function() { 

    $("#instrument").change(function() { 
     $("#tunings").html("<select id=\"TuningSelector>\"[..]</div>"); 
    }); 

    $("#TuningSelector").change(function() { 
     DoSomethingWithTheValue(); 
     }); 

}); 

Il problema è: quando lo strumento è cambiato, lo script non risponde più ai cambiamenti TuningSelector. Come JQuery non vede il nuovo elemento TuningSelector ...

Devo chiamare un aggiornamento su JQuery o giù di lì? In modo che veda il DOM aggiornato?

risposta

36

In genere si desidera utilizzare on in modo che applichi il gestore ai nuovi elementi corrispondenti al selettore e delegati a un elemento superiore nel DOM.

$('body').on('change', '#control', function() { 
    DoSomething(); 
}); 
+4

.live ("modifica") non sarà implementato fino a jQuery 1.4 http://docs.jquery.com/JQuery_1.4_Roadmap#Events –

+1

@ Sam - grazie per averlo indicato. Non l'avevo ancora usato con una selezione e non mi ero reso conto che non era nella lista supportata. La mia risposta è stata aggiornata per riflettere questo. – tvanfosson

+0

per chi legge questo, .live() non è deprecato a favore di .on() –

2

Con eventi jQuery se si desidera che l'evento si applica ai nuovi elementi si può usare il metodo .live, tuttavia jQuery 1.3 non supporta sfocatura, messa a fuoco, MouseEnter, mouseLeave, cambiamento, presentare gli eventi come eventi dal vivo. (modifica, invio e sfocatura/messa a fuoco sono su roadmap per jQuery 1.4)

In alternativa è possibile utilizzare il plug-in liveQuery.