2010-11-30 2 views
6

Это просто самое странное. У меня есть приложение Sammy.js, и я хочу сосредоточиться на текстовом поле сразу после загрузки HTML. У меня есть этот CoffeeScript здесь:Невозможно установить фокус() в текстовое поле

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

В то время как я нахожусь в отладчике, прямо на этой линии, я могу осмотреть «я» и посмотреть, что это объект JQuery. Я могу даже позвонить i.val («HI THERE!») И посмотреть обновление моего текстового поля. Но вызов i.focus() абсолютно ничего не значит. Есть ли какая-то функция безопасности, которую я пропускаю, что не позволяет сосредоточиться на текстовом элементе, который был динамически загружен?

+0

CoffeeScript ftw – drozzy 2012-01-12 17:42:48

+0

Кстати, откуда вы знаете, что вы можете делать ". Then" на частичном? Я не могу, для своей жизни, выяснить, что возвращает «частичный» метод из Sammy.js api docs. Как вы оцениваете это? – drozzy 2012-01-12 17:44:36

ответ

0

Если вы уверены, что получаете $('#item') объект. Вы можете попробовать несколько вещей.

Убедитесь, что у вас есть только одно поле ввода с <input type="text" id="item" />. Идентификатор не должен повторяться.

Следующая вещь, почему вы не попробуете $('#item').focus().

Спасибо. касаемо,

Wasim

2

фокус JQuery (в) не фокусируется на элемент, он связывает обработчик события, чтобы сосредоточиться. http://api.jquery.com/focus/

Попробуйте вместо i.get(). Focus().

+0

На самом деле, когда я делаю $ ('input [type = text]'). Focus(), он работает в Chrome, но не iOS. Вот фактический файл: https://github.com/pkulak/mealfire_mobile/blob/master/coffeescripts/add_extra.coffee – 2010-11-30 19:33:30

1

Делают это так:

i.trigger 'focus' 
4

Try:

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

Это довольно распространенная проблема. По какой-то причине отсрочка фокуса на 1 мс заставляет его работать.

Смежные вопросы