0

所以我有一个表单,我使用 jquery post 方法提交,并用 ajax 返回的数据替换分区的内容。这是代码:

    $(".filter_field").change(function() {
        $.post("/business/feedbacks/", $("#filter_form").serialize(),
            function(data) {
            $('#table-content').replaceWith($('#table-content', $(data)));
            });
    });

现在我面临这个方法的两个问题:

1)我还使用了一个重置​​按钮,它只是将表单的字段值重置为初始值,然后触发更改事件,如下面的代码所示:

      $('#filter_reset').click(function () {
            $(':input','#filter_form')
            .not(':button, :submit, :reset, :hidden')
            .val('')
            .removeAttr('checked')
            .removeAttr('selected');
            $(".filter_field").trigger('change');

      });

现在,每当我单击重置按钮时,它都会重置表单的字段并通过上述更改事件使用 ajax 提交表单。到目前为止一切顺利,但现在我无法再触发更改事件。现在无论我现在在表单中单击哪个字段,它都不再使用 ajax 提交表单。

2)我在#table-content 部门(它的多个实例)中安装了一个声音管理器插件。现在在 ajax 提交之后,该 soundmanager 插件停止工作,因为我假设,由于 soundmanager 在就绪事件中加载,它在 ajax 提交和 replaceWith 之后不会执行,因此它停止工作。

有什么办法可以规避这些问题?我是新来的查询,如果我做错了,请指导我正确的方向。提前非常感谢。

编辑:事实证明,如果我包含 $.getScript("/static/js/360player.js"); 它工作正常。没有一种方法可以将事件附加到使用 jquery replaceWith 命令替换的元素上。'On' 事件似乎根本不起作用。

Edit2:事实证明,我在错误的分区上使用了“on”。我的错 :(

4

1 回答 1

0

当您替换元素时,您还会删除任何附加的事件处理程序。您需要使用委托将事件处理程序绑定到现有元素未来元素......

$("body").on("change", ".filter_field", function() {
    $.post("/business/feedbacks/", $("#filter_form").serialize(),
        function(data) {
        $('#table-content').replaceWith($('#table-content', $(data)));
        });
});

不确定您的第二个问题,但听起来也需要类似的方法。

于 2012-02-27T19:49:31.547 回答