jquery在ajax之后处于非活动状态

jquery在ajax之后处于非活动状态,jquery,ajax,jquery-ui,jquery-ui-sortable,Jquery,Ajax,Jquery Ui,Jquery Ui Sortable,我在列表中使用jquerysortable来移动元素。它可以很好地启动,但我的页面上还有一个ajax面板,可以向列表中添加新项目。一旦ajax将新元素发送到列表中,我就无法再对其进行排序。我接到这个电话: $("#MainContent_previewlist").sortable({ update: function (event, ui) { } }); 我不熟悉javascript。我是否需要调用一些事件来让jquery在ajax之后评估新列表?当

我在列表中使用jquerysortable来移动元素。它可以很好地启动,但我的页面上还有一个ajax面板,可以向列表中添加新项目。一旦ajax将新元素发送到列表中,我就无法再对其进行排序。我接到这个电话:

$("#MainContent_previewlist").sortable({
            update: function (event, ui) { }
        });

我不熟悉javascript。我是否需要调用一些事件来让jquery在ajax之后评估新列表?

当页面加载jquery绑定到id时。当您调用ajax并刷新页面上的内容时,您将失去绑定。您有两个选项来修复此问题。第一个是在Ajax调用结束时再次调用绑定。例如:

$.ajax(function() {
    //... your ajax
    success: function(html) {
        // update page with html
        Rebind();
    }
});

function Rebind() {
    $("#MainContent_previewlist").sortable({
        update: function (event, ui) { }
    });
}
如果您正在处理侦听事件单击、更改、更新等,则可以绑定未更新的内容,例如文档。例如:

$(document).on('click', '#my-id', function() {
    // do something...
});

该绑定将通过Ajax调用保持,但除非必须使用该方法,否则不建议您使用该方法,因为这意味着事件将通过DOM中的每个元素传递,只有在它到达文档时才会被拾取。

就像Styphon所说的,尝试绑定到不会通过Ajax重新加载的对象。 但我建议您不要绑定到文档,最好绑定到“body”或 有一个与之绑定的div。我改进了用您使用的id回答完整示例的问题,在本例中,$这是您希望使其可排序的元素。试试这个,让我们知道:

$('body').on('click', '#MainContent_previewlist', function() {
    $(this).sortable({
        update: function (event, ui) { }
    });
});

在ajax调用之后,您需要回忆一下这段代码,请添加剩余的代码。JSFIDLE会有所帮助。在ajax调用函数结束时,重新初始化排序表,例如-$MainContent\u previewlist.sortable;-看看这是否有帮助