Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fancytree(Javascript)开关打开/关闭dnd5_Javascript_Drag And Drop_Toggle_Fancytree - Fatal编程技术网

Fancytree(Javascript)开关打开/关闭dnd5

Fancytree(Javascript)开关打开/关闭dnd5,javascript,drag-and-drop,toggle,fancytree,Javascript,Drag And Drop,Toggle,Fancytree,我正在尝试打开/关闭拖放功能。我试图通过从extensions属性切换“dnd5”来实现这一点,但它不起作用 我想在不拖放的情况下初始化树。然后,用户可以单击按钮切换拖放功能 *注意:“dnd5”是我正在使用的唯一扩展名 树按计划进行初始化,但当我单击按钮时,拖放功能从未激活。我做错了什么 var $tree = $("#tree-drag"); function toggleDnD(isOn) { if (isOn) { $mainTree.extensi

我正在尝试打开/关闭拖放功能。我试图通过从extensions属性切换“dnd5”来实现这一点,但它不起作用

我想在不拖放的情况下初始化树。然后,用户可以单击按钮切换拖放功能

*注意:“dnd5”是我正在使用的唯一扩展名

树按计划进行初始化,但当我单击按钮时,拖放功能从未激活。我做错了什么

var $tree = $("#tree-drag");

function toggleDnD(isOn) {
   if (isOn) {
     $mainTree.extensions.push("dnd5");
   }  
   else {
      if ($mainTree.extensions.length > 0)
         $mainTree.extensions.pop();
   }
}

$("#btn-dnd-on").on("click", function() { toggleDnD(true); });
$("#btn-dnd-off").on("click", function() { toggleDnD(false); });

var $mainTree = $tree.fancytree({
            extensions: [],
            autoScroll: true,
            init: function (event, data) {

            },
            dnd5: {
                dragStart: function (node, data) {
                    data.effectAllowed = "all";
                    data.dropEffect = data.dropEffectSuggested;
                    return true;
                },
                dragEnter: function (node, data) {
                    return true;
                },
                dragOver: function (node, data) {
                    data.dropEffect = data.dropEffectSuggested;
                },
                dragDrop: function (node, data) {
                    var newNode,
                    transfer = data.dataTransfer,
                    sourceNodes = data.otherNodeList,
                    mode = data.dropEffect;

                    data.originalEvent.preventDefault();

                    if (data.hitMode === "after") {
                        sourceNodes.reverse();
                    }
                    if (data.otherNode) {
                        var sameTree = data.otherNode.tree === data.tree;

                        if (mode === "move") {
                            console.log("moved");                                
                            var _node = data.otherNode;

                            var childId = data.otherNode.data.id;
                            var parentId = data.node.data.id;

                            $(_node).attr({
                                "data-child": childId,
                                "data-parent": parentId
                            });
                            data.otherNode.moveTo(node, data.hitMode);
                            
                            //Assign the parent ID to the object. This will tell the system that a category has changed its home and needs its parent to be updated.
                            $("ul.ui-fancytree-source").find("li[data-id='" + childId + "']").attr("data-parent", parentId);


                        }
                        else {
                            newNode = data.otherNode.copyTo(node, data.hitMode);
                            if (mode === "link") {
                                newNode.setTitle("Link to " + newNode.title);
                            }
                            else {
                                newNode.setTitle("Copy of " + newNode.title);
                            }
                        }
                    }
                    else if (data.otherNodeData) {
                        node.addChild(data.otherNodeData, data.hitMode);
                    }
                    else if (data.files.length) {
                        for (var i = 0; i < data.files.length; i++) {
                            var file = data.files[i];
                            node.addNode({ title: "'" + file.name + "' (" + file.size + " bytes)" }, data.hitMode);
                        }
                    }
                    else {
                        node.addNode({ title: transfer.getData("text"), }, data.hitMode);
                    }
                    node.setExpanded();
                    $(".fancytree-statusnode-nodata").parent("li[role='treeitem']").remove();
                }
            },
            dblclick: function (event, data) {
                // Get the next table
                var id = data.node.data.id;
                getTable(id);
                setTreeNode(id);
                node.setExpanded(true);
                node.setActive(true);
            }

           });
var$tree=$(“#树拖动”);
功能切换DND(isOn){
国际单项体育联合会{
$mainTree.extensions.push(“dnd5”);
}  
否则{
如果($mainTree.extensions.length>0)
$mainTree.extensions.pop();
}
}
$(“#btn dnd on”).on(“单击”,function(){toggleDnD(true);});
$(“#btn dnd off”).on(“click”,function(){toggleDnD(false);});
var$mainTree=$tree.fancytree({
扩展:[],
autoScroll:是的,
init:函数(事件、数据){
},
dnd5:{
dragStart:函数(节点、数据){
data.effectAllowed=“全部”;
data.dropEffect=data.dropEffectSuggestived;
返回true;
},
绘图器:功能(节点、数据){
返回true;
},
dragOver:功能(节点、数据){
data.dropEffect=data.dropEffectSuggestived;
},
dragDrop:函数(节点、数据){
var newNode,
传输=data.dataTransfer,
sourceNodes=data.otherNodeList,
模式=data.dropEffect;
data.originalEvent.preventDefault();
如果(data.hitMode==“之后”){
sourceNodes.reverse();
}
if(data.otherNode){
var sameTree=data.otherNode.tree===data.tree;
如果(模式==“移动”){
控制台日志(“移动”);
var_node=data.otherNode;
var childId=data.otherNode.data.id;
var parentId=data.node.data.id;
$(_节点).attr({
“数据子对象”:childId,
“数据父项”:父项ID
});
data.otherNode.moveTo(节点,data.hitMode);
//将父ID分配给对象。这将告诉系统某个类别已更改其主类别,需要更新其父类别。
$(“ul.ui fancytree source”).find(“li[data id=”“+childId+””).attr(“data parent”,parentId);
}
否则{
newNode=data.otherNode.copyTo(node,data.hitMode);
如果(模式=“链接”){
newNode.setTitle(“链接到”+newNode.title);
}
否则{
newNode.setTitle(““+newNode.title”的副本);
}
}
}
else if(data.otherNodeData){
node.addChild(data.otherNodeData,data.hitMode);
}
else if(data.files.length){
对于(var i=0;i
初始化后,修改扩展名列表将不起作用

相反,您可以维护一个全局标志,并在dragStart事件中返回false:

  dnd5: {
    dragStart: function (node, data) {
      if( dndDisabled ) { return false; }
      data.effectAllowed = "all";
      data.dropEffect = data.dropEffectSuggested;
      return true;
    },

另请参见。

谢谢@mar10!这几乎就像…你做了fancytree什么的……)