2010-11-30 21 views
6

Esto es lo más extraño. Tengo una aplicación Sammy.js, y quiero establecer el foco en un campo de texto justo después de que se cargue el HTML. Tengo esta CoffeeScript aquí:No se puede establecer el foco() en un campo de texto

this.partial('templates/my-template.jqt').then -> 
    i = $('#item') 
    debugger 
    i.focus() 

Mientras estoy en el depurador, justo en esa línea, puedo inspeccionar "i" y veo que es un objeto jQuery. Incluso puedo llamar a i.val ("HI ALLÍ!") Y ver mi actualización de campo de texto. Pero, al llamar a i.focus() no hace absolutamente nada. ¿Hay alguna característica de seguridad que me falta que no te permita concentrarte en un elemento de texto que se cargó dinámicamente?

+0

CoffeeScript ftw – drozzy

+0

Por cierto, ¿cómo sabes lo que puedes hacer ".then" en el parcial? No puedo, por mi vida, descubrir qué devuelve el método "parcial" de Sammy.js api docs. ¿Cómo te imaginas esas cosas? – drozzy

Respuesta

0

Si está seguro de que está recibiendo el objeto $('#item').Puede probar algunas cosas.

Asegúrese de tener solo una casilla de entrada con <input type="text" id="item" />. La identificación del nombre no se debe repetir.

Lo siguiente es por qué no pruebas $('#item').focus().

Gracias. en lo que respecta,

Wasim

2

enfoque de jQuery() no se centra en un elemento, se une un controlador de eventos para enfocar. http://api.jquery.com/focus/

Pruebe i.get(). Focus() en su lugar.

+0

En realidad, cuando hago $ ('input [type = text]'). Focus(), funciona en Chrome, pero no en iOS. Aquí está el archivo real: https://github.com/pkulak/mealfire_mobile/blob/master/coffeescripts/add_extra.coffee –

+2

Cuando intento 'i.get(). Focus()' en Chrome, obtengo "UnEught TypeError: El objeto [objeto HTMLInputElement] no tiene el método 'focus' ". – LarsH

+2

También re: "El foco de JQuery() no se centra en un elemento, sino que vincula un controlador de eventos al foco": sin argumentos, no vincula un controlador de eventos; desencadena uno. – LarsH

1

hacerlo de esta manera:

i.trigger 'focus' 
4

Probar:

setTimeout(function() { $('#item').focus() }, 1); 

Es problema bastante común. Por alguna razón, retrasar el enfoque para 1 ms lo hace funcionar.

+0

Qué. Los. Infierno. +1,000 internets – glyph

Cuestiones relacionadas