首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery live draggable / live droppable?

jQuery live draggable / live droppable?
EN

Stack Overflow用户
提问于 2010-06-11 01:26:28
回答 2查看 11.5K关注 0票数 6

基本上有两个表:公司和访问者。目前,将访问者拉到公司是可能的。效果很好。drop函数一出现,就会有两个$.post,第一个将拖动保存到数据库中。第二个更新访问者,因为信息不断变化。然而,问题是,一旦第二个$.post完成,Firebug就会继续弹出以下错误:

代码语言:javascript
运行
复制
d(this).data("draggable") is null

它出现在jQuery UI文件中。在56行。

大概400次左右。因此,基本上我正在寻找一种使用draggable和droppable来做live()的方法。

.draggables在#visitors (一个ul)中。可丢弃的内容在#个公司(表)中。

谢谢!

代码语言:javascript
运行
复制
$(".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'
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-11 19:25:34

当重新加载访问者时,你正在替换所有的可拖动元素,当你执行$('#visitors').html(data);时-因此那些以前可拖动的元素将被删除,并替换为不可拖动的新元素。(我很确定您已经意识到了这一点,因为提到了.live()__,所以这里只是为了完整)

但是,您可以确切地知道访问者元素何时发生更改,所以为什么不在更改后立即对可拖动效果进行另一个请求,而不是使用.live()的替代方法。在替换旧的draggables之前“销毁”它们可能会更安全,但我不确定这是否是严格必要的。

代码语言:javascript
运行
复制
$.post('planning/' + $('ul.periods li.active').attr('id'), {visitors:true}, function(data){      
    $(".draggable").draggable("destroy");
    $('#visitors').html(data); 
    $(".draggable").draggable({ revert:true }); 
}); 
票数 9
EN

Stack Overflow用户

发布于 2011-11-28 06:12:43

1)创建x个元素

代码语言:javascript
运行
复制
<div class='dropzone'></div>
<div class='droppableItem'></div>

2)向所有Dropzone添加监听器

代码语言:javascript
运行
复制
$(".dropzone").liveDroppable( { hoverClass:'drophover', accept:'.droppableItem' });

3)定义自定义函数liveDroppable

代码语言:javascript
运行
复制
(function ($) {
   $.fn.liveDroppable = function (opts) {
      this.live("mouseenter", function() {
         if (!$(this).data("init")) {
            $(this).data("init", true).droppable(opts);
         }
      });
      return $();
   };
}(jQuery));

4)每当您以编程方式添加新的dropzone时,只需调用..

代码语言:javascript
运行
复制
    $(".dropzone").mouseenter();

结果:以编程方式添加的dropzones或'live‘dropzones将成为可丢弃的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3016855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档