我在使用此功能时遇到问题。
情况是:
这一切都很完美,差不多,问题是我无法将不同的项目拖到div上。我确定它与AJAX Post之后加载的新div(具有相同的ID)有关。
这是我的jQuery代码
$(function () {
$('.draggable').draggable({ revert: true });
$('#layoutHeader').droppable({
drop: function (event, ui) {
$.ajax({
type: "POST",
url: '/SiteSetup/GetMarkup/' + $(ui.draggable).attr("id"),
success: function (data) {
$('.draggable').draggable('destroy');
$('#layoutHeader').replaceWith(data);
$('.draggable').draggable({ revert: true });
}
});
}
});
});
答案 0 :(得分:3)
使用jQuery和DOM,如果用完全相同的DOM元素替换DOM元素并使用完全相同的DOM id(因此id为“div1”的div被另一个id为“div1”的div替换)则关联的jQuery具有该DOM元素的数据会丢失。 jQuery的指针实际上指向页面上不再存在的ghost元素。
要查看证明,请在Firefox中启动firebug,然后转到
$("#layoutHeader")
在你的AJAX帖子之前和之后。单击控制台中返回的元素。你会注意到,在第二次点击(即POST返回后),你的萤火虫将指向一个灰色的幽灵元素。
解决方案是稍微重构一下你的代码。试试这个
function handler(event,ui){
$.ajax({
type: "POST",
url: '/SiteSetup/GetMarkup/' + $(ui.draggable).attr("id"),
success: function (data) {
$('.draggable').draggable('destroy');
$('#layoutHeader').replaceWith(data);
$('.draggable').draggable({ revert: true });
}
$('#layoutHeader').droppable({drop: handler});
}
$(function () {
$('.draggable').draggable({ revert: true });
$('#layoutHeader').droppable({drop: handler});
});
答案 1 :(得分:1)
保留您要插入DOM的HTML的id
不会保留附加到您要替换的droppable
的{{1}}小部件。
您需要重新构建代码,以便在新内容上重新初始化div
窗口小部件:
droppable
或者,您可以将$('.draggable').draggable({ revert: true });
function createDroppable() {
$('#layoutHeader').droppable({
drop: function (event, ui) {
$.ajax({
type: "POST",
url: '/SiteSetup/GetMarkup/' + $(ui.draggable).attr("id"),
success: function (data) {
$('.draggable').draggable('destroy');
$('#layoutHeader').replaceWith(data);
/* Re-initialize the droppable widget: */
createDroppable();
$('.draggable').draggable({ revert: true });
}
});
}
});
}
createDroppable();
与另一个充当#layoutHeader
的{{1}}打包在一起。这样,替换div
不应删除droppable
功能。