Jquery ui jQuery draggable无法处理通过ajax调用添加的元素
我有一个通过对话框更新的对象列表。当用户单击“刷新”按钮时,它将重新加载更新的列表,并将该列表附加到同一个表中。但是,当我重新加载更新的列表时,jqueryui的draggable函数停止工作。我曾尝试在ajax成功处理程序中插入$('draggable').draggable行,并在ajax调用发生后插入,但都没有成功。我还有一个用于可拖动容器的jquyer live事件处理程序,该容器在刷新列表时不适用 下面是我最初加载列表的代码、可拖动容器的live函数以及用户单击刷新按钮时的函数。在下面的代码中,我还尝试将ui可拖动类添加到对象中,但没有成功:Jquery ui jQuery draggable无法处理通过ajax调用添加的元素,jquery-ui,jquery,dynamic,jquery-ui-draggable,Jquery Ui,Jquery,Dynamic,Jquery Ui Draggable,我有一个通过对话框更新的对象列表。当用户单击“刷新”按钮时,它将重新加载更新的列表,并将该列表附加到同一个表中。但是,当我重新加载更新的列表时,jqueryui的draggable函数停止工作。我曾尝试在ajax成功处理程序中插入$('draggable').draggable行,并在ajax调用发生后插入,但都没有成功。我还有一个用于可拖动容器的jquyer live事件处理程序,该容器在刷新列表时不适用 下面是我最初加载列表的代码、可拖动容器的live函数以及用户单击刷新按钮时的函数。在下面
$.ajax({
async: false,
type: 'POST',
url: 'collection.php',
success: function(data) {
$("#collection").append(data);
}
});
$("#refresh_collection").click(function(){
$("#collection").html("");
$.ajax({
async: false,
type: 'POST',
url: 'collection.php',
success: function(data) {
$("#collection").append(data);
$('.draggable_container:not(.ui-draggable)').live("mouseover", function(){
$(".draggable_container").addClass("ui-draggable");
});
}
});
});
$('.draggable_container').live('mouseover',function(){
$(this).draggable({
cursor: "move",
cursorAt: { top: -5, left: -5 },
stop: function(){}
})
});
我可以使用on函数而不是live函数让draggables工作,但现在我意识到,在打开jqueryui对话框,关闭它,然后单击刷新按钮后,它们就不工作了。如果我只需单击刷新按钮而不首先打开对话框,那么一切都可以正常工作。但是,如果我打开对话框,关闭它,然后单击“刷新”按钮,则“可拖动”将关闭,但如果我只打开对话框并关闭它而不按“刷新”按钮,则该功能确实有效。有没有办法解决这个问题?当我关闭对话框时,销毁draggable然后重新初始化它听起来像解决方案吗 我最终希望在对话框像这样关闭时调用ajax,但这段代码仍然不起作用。任何帮助都将非常感激
var $dialog = $("#upload_dialog").dialog({
autoOpen: false,
height: 375,
width: 500,
modal: false,
open: function() {
$("body").draggable("destroy");
$tab_title_input.focus();
},
close: function() {
$.ajax({
async: false,
type: 'POST',
url: 'collection.php',
success: function(data) {
$("#collection").html(data);
$("body").on("mouseover", ".draggable_container", function(){
$(".object_container").draggable({
cursor: "move",
cursorAt: { top: -5, left: -5 },
stop: function(){}
})
});
}
});
}
});
删除第一个
.live
调用,并将第二个.live
调用更改为以下内容:
$('body').on('mouseover', '.draggable_container',
function(){
$(this).draggable({ cursor: "move", cursorAt: { top: -5, left: -5 }, stop: function(){} });
});
.live()已被长期弃用(认为不再受支持),应使用