jquery停止在重新加载的div中工作

时间:2014-08-20 03:53:54

标签: javascript jquery

所以我使用类似$('#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代码将无法运行。

更新: 我创造了一个显示问题的小提琴。如果单击该按钮,则表的排序功能将不再有效。我是一个通过示例类型学习的人,我不确定如何处理以下答案。有人可能会告诉我使用我的小提琴如何解决它?

http://jsfiddle.net/1mfgfd2n/7/show/

1 个答案:

答案 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无法做任何事情。

可能的通用解决方案(针对事件,liveon)是添加&#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获取响应并重新绑定事件相同。