2010-05-17 16 views
7

En jquery he agregado un elemento <li> a una lista desordenada.jquery ¿se centró en el contenido dinámico?

¿Cómo me concentro en el recién creado <li>?

Si hago lo siguiente:

$("ul").append('<li><input type="text" value="Hi!"></li>'); 
$("li:last").focus(); //doesn't work because new <li> isn't in dom yet 

el foco no funciona, como se señaló anteriormente.

Sé 1.4.2 jQuery tiene un manejador de eventos live() que le permite cargar los controladores de eventos a elementos añadidos de forma dinámica, pero no estoy seguro de lo que estoy haciendo mal:

$(document).ready(function() { 

    $('li').live('load', function() { 
     alert("hi!"); 
     $("li:last").focus(); 
    }); 
}); 
+0

El elemento 'input' es un elemento ** VACÍO **, no debería tener una etiqueta final. Probablemente quiera poner 'hi!' En un atributo de valor. – Quentin

+0

@David, gracias. Este no es el código real, pero lo arreglaré de todos modos. – Alan

+0

2500 visitas y ni un voto por turno. BUENOS TIEMPOS. – Alan

Respuesta

7

Sólo se puede establecer el foco a los elementos que pueden mantener el foco. Por defecto, un elemento de la lista no puede. Es por esto que el primer ejemplo falla, no porque no está en el DOM (que es en el DOM, que es lo que hace append)

En general, usted debe utilizar elementos diseñados para mantener el foco (es decir establecer el foco en la entrada no en el elemento de la lista). También puede (pero esto es menos compatible con versiones anteriores y menos lógico) usar HTML5 tabindex (probablemente estableciéndolo en 0).

onload no funcionará porque los elementos de la lista no cargan contenido externo.

+0

Gracias. Esto funcionó. – Alan

2

Puedes probar esto, $(YourElement).trigger("focus").

0

Esta es una publicación anterior que conozco, pero una forma simple de resolver este problema es crear una entrada de texto en su HTML y establecer su CSS para "mostrar: ninguno;". En el evento de clic de LI, establezca el foco en esta entrada y escuche sus eventos de pulsación de tecla.

Lo he hecho y funciona como un encanto.

Cuestiones relacionadas