我遇到了一个问题,页面上的动态元素在“pageshow”上更新。如果用户直接访问URL或从站点中的其他位置导航到该URL,则此方法很有用。问题是如果我直接进入该页面或刷新它(例如:mydomain.com/#somepage.html)它失败并且我收到错误:
Uncaught在初始化之前无法调用selectmenu上的方法;试图调用方法'刷新'
我在一个用ajax内容填充选择列表的函数中调用refresh。
我已经看过使用另一个事件而不是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;
}
此外,这特定于直接转到哈希网址,但在其他方面效果很好。
答案 0 :(得分:2)
那是因为你太晚了绑定了pageshow事件。它已经显示出来了。
为了确保它的工作原理,请将您的代码放在jquery mobile之前加载的文件中,并确保不等待DOMready调用$('[data-role=page]').live('pageshow' ...
即使选择器由于未加载DOM而导致空结果,live也是唯一可行的。