before.jstree在jquery中拖放节点时调用了两次

时间:2011-07-21 12:28:10

标签: jquery jstree

我正在尝试在jstree中移动节点(这是从一个构建的 json_data)。

当我移动节点时,我想显示“你是吗? 你确定要移动吗?“。我使用以下代码执行此操作。

   $("#demo2").bind("before.jstree", function (e, data) {

       if(data.func == "move_node"  && data.args[1] == false && data.plugin == "core")
       {
            if (confirm('Are you sure you want to move?') === false) {
               e.stopImmediatePropagation();
               return false;
            }
       }

});

但是这个“你确定要移动吗?”确认消息显示两次。

我可以知道如何解决这个问题吗?我正在使用最新的jstree,jquery commit.And我没有使用crrm插件。我只使用dnd插件。

请告知。

此致 围


谢谢你的回复克里斯。我试过这个,但仍然无法正常工作。此处的警报也会出现两次。请指教。 $(“#demo2”)。bind(“before.jstree”,function(e,data){try {var flag = 1; var nodeMoved = data.args [0] .o;} catch(e){flag = 0;} if(data.func ==“move_node”&& data.args [1] == false&& data.plugin ==“core”&& flag == 1){// alert(data.func +“---”+ data.args [1] +“---”+ data.plugin); if(!confirm(“你确定要移动吗?”)){e。 stopImmediatePropagation(); return false;}}});

2 个答案:

答案 0 :(得分:0)

我自己没有遇到过这个问题,但我已经在jstree用户组上看到了这个问题。我相信在这个时候唯一的解决方案是创建一个全局的javascript标志。一旦用户指示是/否,您可以关闭它以防止额外的弹出窗口。当然,您需要在之后清除标记,这样您就不会禁止将来的移动确认提示。

另外,我注意到在对before.jstree的多次调用中,data.func ==“move_node”中只有一个定义了data.args [0] .o(参见_get_move jstree数据中经常使用的对象的描述)。所以你可以修改你的代码到这样的东西作为全局标志的替代品(我玩过这个但没有投入生产YMMV):

if(data.func == "move_node"  && 
   data.args[1] == false && 
   data.plugin == "core" &&
   data.args[0].o != undefined)
   {
        // your work goes here...
   }

答案 1 :(得分:0)

我知道这个问题已有百万年历史,但我在这里遇到了同样的问题。我真的不知道问题是什么,但我发现添加对“crrm”插件的引用可以解决它。 我想这可能是因为“核心”复制了“get_move”和“check_move”函数,但我没有进一步研究它......