Я сталкиваюсь с проблемой, когда динамические элементы на странице обновляются в "pageshow". Это прекрасно работает, если пользователь переходит непосредственно к URL-адресу или переходит на него откуда-то еще на сайте. Проблема в том, что, если я перехожу непосредственно на эту страницу или обновляю ее (например, mydomain.com/#somepage.html), происходит сбой, и я получаю ошибку:
Uncaught не может вызывать методы в selectmenu до инициализации; попытался вызвать метод «refresh»
Я вызываю обновление в функции, которая заполняет списки выбора содержимым ajax.
Я смотрел на использование другого события вместо PageShow, но ни одно из них не подходит.
Вот соответствующие биты кода:
//attach all listeners on dynamically loaded pages here
$('[data-role=page]').live('pageshow', function(event, ui){
//do stuff (get data, get select options, index of current selected
$('select.myselect').fillSelect(itemsArray,indexofSelected);
...
)}; //pageshow
Это функция, которую я использую для заполнения выбора:
$.fn.fillSelect = function (items,index){
//generically fills a select list - requires an array and target element optional index of selected element
this.find('option').remove();
var options = "";
for (var i = 0; i < items.length; i++) {
var selected = (index == i) ? 'selected="selected"' : "" ;
options += '<option '+selected+'value="'+items[i]+'">'+items[i]+'</option>';
}
//assembling html first cause appends are expensive
this.append(options).selectmenu('refresh', true);
return this;
}
Опять же, это характерно для перехода непосредственно к хеш-URL, но работает совершенно иначе.