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
---------------------
作者:LYM0721
来源:CSDN
原文:https://blog.csdn.net/LYM0721/article/details/82183580?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!