【发布时间】:2011-07-26 10:05:34
【问题描述】:
我在使用 JQuery UI 时遇到了问题。我想要实现的是:
- 我有一个带有对象的可排序列表 (
.form_container)。当它们的位置发生变化时,ajax 调用会更新数据库。 - 在这个列表之外,我还有“文本项目”(
.create_item)。当这些项目被放到可排序列表中时,我想进行一个 ajax 调用,它将为我提供内容,以便我可以将我的简单项目转换为一个对象。 - 那么,因为添加了一个新对象,我希望触发位置的 ajax 调用。但不是在我的新对象正确加载之前。
我希望我足够清楚......
所以首先,我想做这样的事情
第一次尝试:
$(".create_item").draggable({
containment: 'window',
connectToSortable: ".form_container",
helper: "clone",
});
$(".form_container").droppable({
accept: ".create_item",
tolerance: 'fit',
over: function(event,ui) {
// Something here
},
drop: function(event,ui) {
// Ajax calls that changes my item into an object
}
});
$(".form_container").sortable({
axis: "y",
containment: ".form_container",
revert: true,
update: function(event, ui){
// Ajax calls that update positions in DB
}
});
问题是,connectToSortable 也触发了 drop 事件,所以这个事件被调用了两次,从而造成了麻烦。
所以我听从了某人对 SOF 的建议,并为此更改了我的代码。
第二次尝试:
$(".create_item").draggable({
containment: 'window',
connectToSortable: ".form_container",
helper: "clone",
});
$(".form_container").droppable({
accept: ".create_item",
tolerance: 'fit',
over: function(event,ui) {
// Something here
}
// No more drop function
});
$(".form_container").sortable({
axis: "y",
containment: ".form_container",
revert: true,
update: function(event, ui){
// Ajax calls that update positions in DB
},
receive: function(event,ui) {
// Ajax calls that changes my item into an object
}
});
问题是,在 receive 事件完成之前触发了 update 事件,并且我的项目还没有被正确地转换成一个好的对象。
差不多了,有人能帮帮我吗?
【问题讨论】:
标签: jquery jquery-ui jquery-ui-draggable jquery-ui-droppable