【发布时间】:2021-04-04 12:14:08
【问题描述】:
我经常使用 JQM 刷新 <div> 元素,其中包含多个绑定。每次刷新后,我都会看到 Chrome 中的侦听器有所增加。在某些时候,页面不再响应。
根据文档,html() 在插入新内容之前替换(即调用empty())该<div>(包括绑定)的所有相关元素,但是,这意味着听众不会增加。即使我使用remove() 删除<div> 元素并重新创建,听众的数量也不会减少。这是否与DOM缓存有关,可能没有被清空?我只有一个页面,据我所知,第一页总是被缓存。
我在这里监督什么?
我的主文档的简化版:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="jquery.mobile-1.4.5/jquery.mobile-1.4.5.min.css" />
<script src="jquery.mobile-1.4.5/jquery-2.1.0.js"></script>
<script src="jquery.mobile-1.4.5/jquery.mobile-1.4.5.min.js"></script>
<script>
$(document).on("pagecreate", function( event ) {
var interval;
setRefreshTime();
function setRefreshTime() {
interval = setTimeout(function () { refresh(); }, 10000);
}
function refresh() {
clearTimeout(interval);
$.ajax({
type: "GET",
url: "content.php",
success: function(data) {
$("#content").html(data);
$("#content").enhanceWithin();
setRefreshTime();
}
});
}
$("#page").on("click", ".function_A", function(){
refresh();
});
$("#page").on("click", ".function_B", function(){
refresh();
});
});
</script>
</head>
<body>
<div data-role="page" id="page">
<div role="main" class="ui-content">
<div id="content"><?php include("content.php");?></div>
</div>
</div>
</body>
</html>
content.php 被加载:
<ul data-role="listview" data-inset="true" data-divider-theme="a">
<li data-role="list-divider">Title A</li>
<li data-role="list-divider">Title B</li>
<div class="ui-grid-a">
<div class="ui-block-a"><a href="#" class="ui-shadow ui-btn ui-corner-all function_A" >Button A</a></div>
<div class="ui-block-b"><a href="#" class="ui-shadow ui-btn ui-corner-all function_B" >Button B</a></div>
</div>
</ul>
编辑:感谢到目前为止的 cmets。我把所有的东西都考虑进去了(我基本上把要替换的(内容)换成了page-;重新运行性能监控时,我没有看到重复的绑定,但仍然增加了监听器。请找到下面的截图:
难道它实际上与 JQM 无关,而是一个 ajax“问题”?
在rar情况下,听众数量突然下降:
如何招惹后者?
【问题讨论】:
-
这只是在黑暗中的一个镜头,但这对你有用吗? stackoverflow.com/a/14519319/3825777
-
谢谢,不幸的是没有成功...在当前版本中没有任何关于缓存的选项。我试图关闭
ajaxEnabled(因为我并没有真正使用默认的JQM ajax),但是,根本没有任何变化。
标签: javascript jquery jquery-mobile