You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态加载后ListView无法通过jQuery刷新样式问题求助

解决jQuery Mobile ListView动态加载后样式不生效的问题

兄弟,折腾10小时确实够闹心的!你的问题核心很明确:动态添加列表项后没有触发jQuery Mobile ListView的刷新机制,导致组件没把样式应用到新添加的内容上。

问题分析

jQuery Mobile的组件(比如ListView)在页面初始化时会自动渲染样式,但当你通过JS动态添加内容后,这些新元素不会被自动处理——你必须手动告诉ListView重新计算并应用样式。

修改后的完整代码

<div data-role="content" id="content"> 
  <ul id="dataList" data-role="listview" data-autodividers="true" data-filter="true" data-filter-placeholder="Search..." data-inset="true" > 
  </ul> 
</div> 

<script type="text/javascript"> 
$(document).ready(function(){ 
  var $dataList = $("#dataList"); 
  $.getJSON("starWars.json", function(data) { 
    $.each(data, function(i, item){ 
      $dataList.append('<li><a href="#'+item.name+'"><img src="images/'+item.pic+'" alt="'+item.name+'"/><h1>'+item.name+'</h1><p>'+item.about+'.</p></a></li>'); 
    });
    // 关键:添加完内容后刷新ListView
    $dataList.listview("refresh");
  }); 
}); 
</script>

关键修改点说明

  • 修正语法错误:你原本的$.getJSON(..., (function(data){...}))里多了一层括号,改成$.getJSON(..., function(data){...})即可;另外$(document).ready()结尾的)()是多余的,已经删掉了。
  • 添加刷新方法:在$.each循环结束后,调用$dataList.listview("refresh");——这一步是让jQuery Mobile重新扫描ListView的内容,把样式、分隔符等效果应用到新添加的列表项上。
  • 修正属性引号:你原来的data-autodividers=true"少了开头的引号,改成data-autodividers="true"避免HTML语法错误。

补充提示

如果你的JSON加载是异步的(本来就是),一定要确保刷新方法是在所有列表项都添加完成后才调用——也就是放在$.each的外面,getJSON回调函数的内部,这样才不会出现部分内容没被渲染的情况。

内容的提问来源于stack exchange,提问作者Gavin Soady

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:22:53