基本上有两个表:公司和访问者。目前,将访问者拉到公司是可能的。效果很好。drop函数一出现,就会有两个$.post,第一个将拖动保存到数据库中。第二个更新访问者,因为信息不断变化。然而,问题是,一旦第二个$.post完成,Firebug就会继续弹出以下错误:
d(this).data("draggable") is null
它出现在jQuery UI文件中。在56行。
大概400次左右。因此,基本上我正在寻找一种使用draggable和droppable来做live()的方法。
.draggables在#visitors (一个ul)中。可丢弃的内容在#个公司(表)中。
谢谢!
$(".draggable").draggable({
revert:true
});
$(".droppable").droppable({
drop: function(ev, ui) {
$(this).text($(ui.draggable).text());
$.post('planning/save_visit', {user_id: $(ui.draggable).attr('id'), company_id: $(this).attr('id'), period: $('ul.periods li.active').attr('id')});
$.post('planning/' + $('ul.periods li.active').attr('id'), {visitors:true}, function(data){
$('#visitors').html(data);
});
},
hoverClass: 'drophover'
});
发布于 2010-06-11 19:25:34
当重新加载访问者时,你正在替换所有的可拖动元素,当你执行$('#visitors').html(data);
时-因此那些以前可拖动的元素将被删除,并替换为不可拖动的新元素。(我很确定您已经意识到了这一点,因为提到了.live()
__,所以这里只是为了完整)
但是,您可以确切地知道访问者元素何时发生更改,所以为什么不在更改后立即对可拖动效果进行另一个请求,而不是使用.live()
的替代方法。在替换旧的draggables之前“销毁”它们可能会更安全,但我不确定这是否是严格必要的。
$.post('planning/' + $('ul.periods li.active').attr('id'), {visitors:true}, function(data){
$(".draggable").draggable("destroy");
$('#visitors').html(data);
$(".draggable").draggable({ revert:true });
});
发布于 2011-11-28 06:12:43
1)创建x个元素
<div class='dropzone'></div>
<div class='droppableItem'></div>
2)向所有Dropzone添加监听器
$(".dropzone").liveDroppable( { hoverClass:'drophover', accept:'.droppableItem' });
3)定义自定义函数liveDroppable
(function ($) {
$.fn.liveDroppable = function (opts) {
this.live("mouseenter", function() {
if (!$(this).data("init")) {
$(this).data("init", true).droppable(opts);
}
});
return $();
};
}(jQuery));
4)每当您以编程方式添加新的dropzone时,只需调用..
$(".dropzone").mouseenter();
结果:以编程方式添加的dropzones或'live‘dropzones将成为可丢弃的。
https://stackoverflow.com/questions/3016855
复制相似问题