2010-12-14 39 views
12

He generado algunos enlaces html con jQuery y lo he agregado a algunos div pero parece que ahora no puedo llamar al método de clic, cuando estos elementos se anexan (funcionó bien cuando estaban codificados en html) $('#something a').click(function() ...jQuery haga clic en los elementos añadidos

¿Alguien sabe una solución para esto?

Respuesta

21

Uso .delegate() para estos casos:

$('#something').delegate('a', 'click', function() { 

Esto concede un controlador click en #something, en lugar de la dirección a los elementos dentro de <a> ... por lo que funciona en los anclajes se adjuntan más adelante. La alternativa (peor para algunas de las razones) versión es .live() así:

$('#something a').live('click', function() { 
+0

@ Nick - ¿por qué está usando en vivo peor? Solo curiosidad porque la uso mucho. – Josh

+0

@Nick - ¿podría comentar las razones por las cuales .live() es peor? Estoy realmente interesado. ¡Aclamaciones! –

+4

@Josh, @Jakub - Con '.live()', tomemos el código anterior - el selector '$ ('# something a')' se ejecuta inmediatamente, pero no nos importa lo que encontró ... el el resultado es desperdiciado Además, dado que se adjunta a 'document', * cada *' click' se debe comparar con ese selector. Con '.delegate()' solo se ejecuta el selector muy rápido '$ ('# something')', y usamos el resultado. Además, solo se deben verificar los clics desde '# algo ', ya que se verifican en ese elemento primario, por lo que' .delegate() 'aborda 2 motivos de rendimiento ... con un selector más caro, las ganancias son aún mayores. –

0

es necesario utilizar la función en vivo para asegurarse de que el evento click se enganchan a los elementos que se han añadido a la DOM después de la página se ha cargado:

$('#something a').live('click',function() ..... 
+0

funciona bien, gracias1 – Dejan

4

lo que también funciona es añadir la [click] evento al anexar los elementos, así:

$('<someElement>').click(function(){ 
    $('<someElement>').append('<htmlCodeToAppend>'); 
    $('<appendedElement>').click(function() { /* do something */ }); 
}); 

Este enfoque hace el trabajo, pero no estoy seguro Si hay alguna advertencia al respecto, tal vez uno de los profesionales pueda intervenir amablemente.

Saludos, Erik

Cuestiones relacionadas