所以我使用类似$('#msgs').load("<?php echo $_SERVER['REQUEST_URI']; ?> #msgs");
的内容来重新加载包含a table that allows for dynamic sorting by the user的div。
我面临的问题是,不仅仅是由tablesorter运行的表,而是任何其他时间我以这种方式重新加载div,任何通常在div中运行的jquery函数都不再起作用。有什么方法可以解决这个问题吗?
$(function () {
$("#backups")
.tablesorter({
widgets: ['zebra'],
sortList: [
[1, 1],
[2, 1],
],
headers: {
6: {
sorter: false
},
}
})
.tablesorterPager({
container: $("#pager")
});
$('#create').click(function(e) {
$.ajax({
type: "GET",
url: '?process=create',
data: '',
success: function(data) {
$('#backups')
.load("<?php echo $_SERVER['REQUEST_URI']; ?> #backups");
}
});
e.preventDefault();
});
});
例如,如果我单击事件#create
,div #backups
将重新加载,在这种情况下,备份的tablesorter代码将无法运行。
更新: 我创造了一个显示问题的小提琴。如果单击该按钮,则表的排序功能将不再有效。我是一个通过示例类型学习的人,我不确定如何处理以下答案。有人可能会告诉我使用我的小提琴如何解决它?
答案 0 :(得分:1)
jQuery中活动事件背后的基本概念很简单。假设你有HTML,
<div class="container"></div>
现在通过AJAX或您喜欢的任何方式,您可以在此div中加载一个按钮。
$.get("url", function(data) {
$('.container').html('<button class="submit-something">Submit</button>');
});
如果您在$(document).ready
上添加了事件处理程序,
$(document).ready(function() {
$('.submit-something').click(clickHandler);
});
但是当文档准备就绪时,没有按钮。这适用于任何&jQuery的东西&#39;你想要更新的内容。除非你有通过选择器访问的元素,否则jQuery无法做任何事情。
可能的通用解决方案(针对事件,live
或on
)是添加&#39; jQuery内容&#39;在AJAX回调中。
$.get("url", function(data) {
$('.container').html('<button class="submit-something">Submit</button>');
$('.submit-something').click(clickHandler);
});
您可以随时通过简单地添加控制台日志来检查元素是否存在。
console.log($('.submit-something').length);
希望这可以回答您关于要执行的任何jQuery操作的问题。
更新:
load
事件是一种特殊情况,无法以这种方式进行测试。但是,直观的是我清除了调用load事件的元素内的内容。因此,与之相关的任何事件或表格都不再适用。加载内容后,您需要将事件或tablesorter再次关联到内部元素。这与从AJAX获取响应并重新绑定事件相同。