21

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

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

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

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

4

7 回答 7

42

只需先调用不带任何参数的 listview 方法:

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

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

于 2013-10-01T08:45:03.100 回答
28

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

if ( $('#myListview').hasClass('ui-listview')) {
    $('#myListview').listview('refresh');
     } 
else {
    $('#myListview').trigger('create');
     }
于 2012-11-28T10:41:25.570 回答
14

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

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

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

对我来说工作得很好!

于 2012-07-20T11:56:33.103 回答
10

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

$('#Results').bind('pageinit', function() {
  $('#myListview').listview('refresh');
});
于 2012-04-29T18:16:10.653 回答
2

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

然后 listview.refresh

于 2013-08-16T12:10:08.463 回答
0

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

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

如果我的帖子在这里。

jquery mobile ajax 将内容加载到 div 元素中将失去它的 css 样式

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

于 2014-09-07T05:25:39.307 回答
0

This is what worked for me:

   $(document).delegate('#Results', 'pageshow', function (){
   $('#mylistview').listview('refresh').trigger('create'); 
   });
于 2020-08-25T10:32:06.710 回答