记ztree插件删除节点结合layer.confirm询问框问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LYM0721/article/details/82183580

问题:layer.confirm无法阻塞js执行,导致ztree插件的beforeRemove回调函数未等待用户确定删除便已经移除界面中的节点, 因此可能会出现前后台数据不一致情况,正常逻辑理应删除后台数据然后移除界面中的ztree节点元素。

解决方案:不使用ztree提供的默认删除功能(beforeRemove函数返回false即可),在layer.confirm中手动调用removeNode方法实现前台与后台的数据同步删除(舍弃ztree提供的自动删除功能)。代码如下:

//beforeRemove回调函数
function zTreeBeforeRemove(treeId, treeNode) {
      var zTree = $.fn.zTree.getZTreeObj("zTree");
      layer.confirm("确认删除节点 -> " + treeNode.name + " 吗?", {btn: ['确定', '取消']},
        function (index) {//确定
          $.ajax({
            url: url,
            data: {"id": treeNode.id},
            type: "POST",
            async: false,
            success: function (data) {
              if (!data) {
                layer.alert("该接口已经被申请!");
              } else {
                //手动移除节点
                zTree.removeNode(treeNode);
                layer.alert("删除成功!");
              }
            },
            error: function () {
              layer.alert("删除失败!");
            }
          });
        },
        function (index) {//取消
          layer.close(index);
        });
      //注意:返回false便不会触发onRemove事件
      return false;
    }

参考文献:https://blog.csdn.net/yqwayward/article/details/78312424

猜你喜欢

转载自blog.csdn.net/LYM0721/article/details/82183580