2011-03-27 36 views
1

我遇到了頁面上的動態元素在「pageshow」上更新的問題。如果用戶直接訪問網址或從網站的其他位置導航到此網站,則此功能非常有用。問題是,如果我直接進入該頁面,或刷新它(例如:mydomain.com/#somepage.html)失敗,我得到的錯誤:jQuery Mobile - 直接訪問哈希URL導致動態元素失敗

上在初始化之前selectmenu

未捕獲無法調用方法;試圖調用方法'刷新'

我在一個函數中調用刷新,該函數使用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; 
} 

再次,這是專門針對打算直接哈希網址,但完美的作品除此以外。

回答

2

這是因爲您綁定的pageshow事件太晚了。它已經顯示。 可以肯定的是,它的作品把你的代碼放在jquery移動之前加載的文件中,並確保你不要等待DOMready去撥打$('[data-role=page]').live('pageshow' ... 即使選擇器讓你空了,由於未加載DOM而導致的結果。

+0

太棒了。這是問題所在,並在我參考JQM之前解決了這個問題。謝謝你! – David 2011-03-28 13:08:56