2009-05-02 12 views
17

Soy nuevo en JQuery, así que tengan paciencia :).jquery no ve elementos nuevos

que tienen un problema simple:

$(document).ready(function() { 

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

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

}); 

El problema es: Cuando instrumento ha cambiado, el guión no responda a los cambios TuningSelector. Al igual que JQuery, no aparece el nuevo elemento TuningSelector ...

¿Debo llamar a una actualización en JQuery o más? ¿Para que vea el DOM actualizado?

Respuesta

36

Generalmente desea utilizar on para que aplique el controlador a los nuevos elementos que coincidan con el selector y delegue en un elemento superior en el DOM.

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

.live ("cambio") no se implementará hasta jQuery 1.4 http://docs.jquery.com/JQuery_1.4_Roadmap#Events –

+1

@Sam - gracias por señalar eso. Todavía no lo había usado con una selección y no me di cuenta de que no estaba en la lista compatible. Mi respuesta ha sido actualizada para reflejar esto. – tvanfosson

+0

para cualquiera que lea esto, .live() no está en desuso en favor de .on() –

2

Con eventos de jQuery si desea que el evento se aplica a los nuevos elementos que utilizaría el método .live, sin embargo jQuery 1.3 no es compatible con el desenfoque, enfoque, MouseEnter, mouseleave, cambio, enviar eventos como eventos en vivo. (cambiar, enviar y desenfocar/enfocar están en el roadmap para jQuery 1.4)

Como alternativa puede usar el complemento liveQuery.

Cuestiones relacionadas