jQuery Mobile - 直接转到哈希URL会导致动态元素失败

时间:2011-03-27 23:34:38

标签: jquery jquery-mobile

我遇到了一个问题,页面上的动态元素在“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;
}

此外,这特定于直接转到哈希网址,但在其他方面效果很好。

1 个答案:

答案 0 :(得分:2)

那是因为你太晚了绑定了pageshow事件。它已经显示出来了。 为了确保它的工作原理,请将您的代码放在jquery mobile之前加载的文件中,并确保等待DOMready调用$('[data-role=page]').live('pageshow' ... 即使选择器由于未加载DOM而导致空结果,live也是唯一可行的。