2009-05-02 15 views
17

Jestem nowy w JQuery, więc proszę o mnie :).jquery nie widzi nowych elementów

mam prosty problem:

$(document).ready(function() { 

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

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

}); 

Problem: Gdy przyrząd został zmieniony, skrypt nie już reagować na zmiany TuningSelector. Podobnie jak JQuery nie widzi nowego elementu TuningSelector ...

Czy muszę wywołać odświeżenie w JQuery? Że widzi odświeżony DOM?

Odpowiedz

36

Generalnie chcesz użyć on, aby zastosować procedurę obsługi do nowych elementów pasujących do selektora i przekazać do wyższego elementu w DOM.

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

.live ("zmiana") nie zostanie zaimplementowana do czasu jQuery 1.4 http://docs.jquery.com/JQuery_1.4_Roadmap#Events –

+1

@Sam - dzięki za wskazanie tego. Nie użyłem go jeszcze z wyborem i nie zdawałem sobie sprawy, że nie ma go na liście obsługiwanych programów. Moja odpowiedź została zaktualizowana, aby to odzwierciedlić. – tvanfosson

+0

dla każdego, kto to czyta, .live() nie jest przestarzałe na rzecz .on() –

2

z wydarzeniami jQuery jeśli chcesz zdarzenie, aby zastosować się do nowych elementów należy użyć metody .live jednak jQuery 1.3 nie obsługuje rozmycia, ostrości mouseenter, mouseLeave, zmiany, przedstawia wydarzenia jak występy na żywo. (zmień, prześlij i zamazuj/ustaw ostrość) na roadmap dla jQuery 1.4)

Jako alternatywę możesz użyć wtyczki liveQuery.