代码之家  ›  专栏  ›  技术社区  ›  DethoRhyne

如何在jquery(ui)中刷新元素上的事件

  •  1
  • DethoRhyne  · 技术社区  · 6 年前

    为了更好地解释这是我的案子。 我有一个 document.ready()

    列出A包含A类元素,列出B包含B类元素。

    我想让用户使用 draggable droppable 从列表A到列表B的元素,但其克隆元素的方式是使用 .clone(true,true) 列出B并使用替换类 .removeClass("a") .addClass("b") . 另一种方法是-当把B中的元素拖到列表A中时,从B中删除

    上面解释的场景只适用于页面加载时列表中的元素,但是当我将对象从A复制到B时,它仍然是可拖动的,但它的行为类似于elem A,以至于当试图拖动它时,拖动阴影从列表A中的原始位置开始,而不是我实际开始的位置在列表中拖动。 考虑到这一点,我需要找到一种方法来“刷新”列表B中新克隆的元素,使其行为类似于列表B元素。

    谢谢你的支持。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Ali Soltani    6 年前

    A我可以从你的问题中看出,你需要关闭一些元素的事件。你可以利用 off() method .

    例如,请参见下面的代码:

    HTML格式

    List A
    <ul>
      <li class="draggable">item1</li>
      <li class="draggable">item2</li>
    </ul>
    
    List B
    <ul class="droppable">
    
    </ul>
    

    $('.draggable').draggable({
      helper: 'clone'
    }).click(function() {
      alert($(this).text());
    });
    
    
    $('.droppable').droppable({
      drop: function(ev, ui) {
        // Add element with all events
        var dropElement = ui.draggable.clone(true, true);
        $(this).append(dropElement);
    
        // Add element without any events
        var dropElementWithoutEvents = ui.draggable.clone(true, true).off();       
        $(this).append(dropElementWithoutEvents);
      }
    });
    

    ui.draggable.clone(true, true).off() 删除所拖动元素的所有事件 click 事件不是通过单击触发的,而是 dropElement ,它被烧掉了。

    Online demo (jsFiddle)

        2
  •  0
  •   DethoRhyne    6 年前

    我已经通过在另一个 draggable() 打电话来。

    初始化时,我有:

    $( ".a" ).draggable({ 
        //...settings
    });
    
    $( ".b" ).draggable({ 
        //...settings
    });
    

     $("#B").droppable({
         accept: ".a",
         //...settings
         drop: function(event, ui) {
             var clone = $(ui.draggable).clone()
             clone.removeClass("a");
             clone.addClass("b");
             $("#B").append(clone);
             $(clone).draggable({ 
                 //...sameSettings
             });
         }
     });
    

    现在克隆的元素作为一个原生的B元素工作,并且一切都正常工作。