重置 Droppable Jquery

Reset Droppable Jquery

我有一个用作文件管理器的简单脚本。思路是将select一组files/directories放到另一个目录下。但是,如果一个目录是 .ui-selected 那么它应该是不可删除的。如果我只 select 一组 files/directories 一次,我目前的脚本可以按预期工作,但如果我取消 select 并重新 select 一个不同的组,它就不再作品。

这里有一个 fiddle 演示了这个问题:https://jsfiddle.net/3gggh6bg/19/

这是 js:

$(function() {
  $("#filemanager").selectable({
    filter: 'tr',
    start: function() {
      $("tr.ui-selected").each(function() {
        $(this).draggable('destroy');
      });
    },
    stop: function() {
      $("tr.ui-selected").draggable({
        helper: function() {
          var dom = [];

          dom.push("<div style=\"border:2px solid black;width:50px;height:20px;line-height:25px;\">",
            "<center>Files Selected: 1</center></div>");

          return $(dom.join(''));
        },

        revert: 'invalid',
        appendTo: 'parent',
        containment: '#filemanager',
        axis: 'y',
        cursor: '-moz-grabbing'
      });

      $(".droppable").not('.ui-selected').droppable({
        //accept: ".ui-selected",
        //activeClass: "ui-state-hover",
        hoverClass: "ui-state-active",
      });
    }
  });
});

感谢任何帮助!谢谢!

我们忽略了一个事件。我怀疑我正在使用与您相同的逻辑来调查此问题。当 stop 事件被触发时,我应该能够找到未选择的项目或已选择的项目,并使一些可丢弃的而其他的则保持不变。

最初是这种情况,但我们未能查看的事件是 unselected 事件。当项目的状态从选中更改回未选中时触发。这是我最终得到的结果:

https://jsfiddle.net/Twisty/3gggh6bg/21/

jQuery

$(function() {
  $("#filemanager").selectable({
    filter: 'tr',
    start: function() {
      $("tr.ui-selected").each(function() {
        $(this).draggable('destroy');
      });
    },
    selected: function(e, ui) {
      console.log(e.target, " Selected triggered.");
      $(ui.selected).removeClass("droppable");
    },
    stop: function() {
      console.log("Stop triggered.");
      $("tr.ui-droppable").droppable("destroy");
      $("tr.ui-selected").draggable({
        helper: function() {
          var c = $("tr.ui-selected").length;
          var $h = $("<div>", {
            class: "ui-helper"
          }).css({
            display: "block",
            border: "2px solid black",
            width: "50px",
            height: "20px",
            "line-height": "25px"
          }).html("<center>Files Selected: " + c + "</center>");
          return $h;
        },
        revert: 'invalid',
        appendTo: 'parent',
        containment: '#filemanager',
        axis: 'y',
        cursor: '-moz-grabbing'
      });
      $("tr.droppable").droppable({
        hoverClass: "ui-state-active"
      });
    },
    unselected: function(e, ui) {
      console.log(e.target, "Unselect triggered.");
      $(ui.unselected).addClass("droppable");
      $("tr.droppable").droppable({
        hoverClass: "ui-state-active"
      });
    }
  });
});

这会在每次选择项目时重置所选项目的 droppable 状态。如果这不符合您的预期,请发表评论并提供更多信息。