Событие
pagecreate
запускается до того, как JQM вносит некоторые изменения в DOM, поэтому я предполагаю, что фокус потерян.
Попробуйте переключиться на pageshow
, особенно потому, что вы хотите получить фокус каждый раз, когда пользователь попадает на страницу.
Если это все еще не работает (был такой случай), оберните код, который вызывает фокусировку во время ожидания (да, это взломать :))
setTimeout(function(){
$('#cache').focus();
},0);
Это взлом, но он не зависит от ожидания интервала времени. setTimeout()
добавляет функцию для рендеринга очереди потока (которая запускает рендеринг javascript и страницы в браузере) по истечении заданного времени. Таким образом, в этом случае функция добавляется мгновенно, поэтому она запускается после завершения текущего потока кода javascript. Таким образом, это способ заставить некоторый код работать сразу после завершения обработчика событий. Так что это не так глупо, как можно подумать. Я называю это хаком, потому что он использует знания о том, как работает браузер, и затеняет ход выполнения кода.
Я рекомендую прочитать о том, как выполнение javascript и рисование страниц обрабатываются одной и той же очередью в одном потоке. Любой, кто работает с более чем 20 строками JavaScript.
Я совершенно уверен, что есть только одно лучшее решение - исправить это в самой среде jQuery Mobile.