【问题标题】:jQuery mobile error "cannot call methods on listview prior to initialization"jQuery 移动错误“无法在初始化之前调用 listview 上的方法”
【发布时间】:2012-04-29 16:03:30
【问题描述】:

我动态填充<ul data-role="listview">,然后调用列表所在的location.href="#Results",最后调用listview('refresh')

所有这些都是在来自同一页面的 Ajax 请求的成功回调中完成的。它或多或少地工作,但我收到以下错误:

Uncaught cannot call methods on listview prior to initialization; attempted to call method 'refresh'

我猜 jQuery mobile 还没有构建列表视图。我能做什么?

【问题讨论】:

    标签: listview jquery-mobile


    【解决方案1】:

    先调用listview方法,不带任何参数:

    $('#myListview').listview().listview('refresh');
    

    解决方案取自http://www.gajotres.net/uncaught-error-cannot-call-methods-on-prior-to-initialization-attempted-to-call-method-refresh/

    【讨论】:

    • 哇!经过一个小时的头撞墙后,我为我工作了。
    • 对我来说也一样:在 JQM 1.4.5 中,我尝试在单击 FullCalendar 中的事件时创建一个动态弹出窗口...对于找到此线程的未来用户:我使用了以下代码eventClick: function(calEvent, jsEvent, view) { var $popup = $('<div data-role="popup" id="eventPopup">testPopup</div>').appendTo('[data-role="content"]'); $('#eventPopup').popup().popup("open"); }
    • @ethanpil 和 intrixius 很高兴我救了你的头免受重大伤害。 :-)
    • 哇..这个解决方案也适用于我的回流表问题。 $(".my-table").table().table("refresh");
    【解决方案2】:

    您应该检查它是否已经初始化,刷新列表以防它被初始化,否则按照以下方式触发创建:

    if ( $('#myListview').hasClass('ui-listview')) {
        $('#myListview').listview('refresh');
         } 
    else {
        $('#myListview').trigger('create');
         }
    

    【讨论】:

      【解决方案3】:

      我有同样的错误。我通过在查询中添加 ":visible" 来解决它,所以它只会在列表可见时运行。

      所以你的代码看起来像这样:

      $('#myListview:visible').listview('refresh');
      

      对我来说很好用!

      【讨论】:

      • 遇到了类似的问题,求解答!谢谢
      【解决方案4】:

      http://jquerymobile.com/demos/1.1.0/docs/api/events.html 您必须挂钩 pageinit 事件。在此之前,您不能调用任何 JQM 方法。 即:

      $('#Results').bind('pageinit', function() {
        $('#myListview').listview('refresh');
      });
      

      【讨论】:

      【解决方案5】:

      使用$.mobile.changePage("#Results"); 代替location.href
      实际上location.href 重新加载页面,以便列表视图被破坏

      然后是 listview.refresh

      【讨论】:

      • 这真是个好主意。谢谢你 Ashish。
      【解决方案6】:

      只需添加 listview.refresh 对我来说效果很好,而且我也在使用 ajax 将内容加载到 div 中。

      document.getElementById("myListview").innerHTML = xmlhttp.responseText;
      //works fine on my work
      $('#myListview').listview('refresh');
      

      如果我的帖子在这里。

      jquery mobile ajax load content into a div element will lose it's css style

      我花了将近 3 个小时来解决我的 postprobem.finaly 在这里找到答案。谢谢。

      【讨论】:

        【解决方案7】:

        这对我有用:

           $(document).delegate('#Results', 'pageshow', function (){
           $('#mylistview').listview('refresh').trigger('create'); 
           });
        

        【讨论】:

          猜你喜欢
          • 2013-01-13
          • 2013-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多