美文网首页程序员
layer弹框删除ztree节点非阻塞问题解决

layer弹框删除ztree节点非阻塞问题解决

作者: 祈澈菇凉 | 来源:发表于2019-09-17 16:53 被阅读0次

在ztree里面,删除一个节点的时候,会弹出一个弹框询问,是否删除,本来用的是网页自带的confirm弹框,根据公司的业务需求,要用到layer弹框删除,这个时候,就出现了一个问题。

问题:触发删除事件之后,弹出layer弹框,但是没有点击确定或者取消,就已经将选中的节点删除了。

原因:layer.confirm不能阻塞事件(confirm是网页自带的,有阻塞事件),不管有没有确定按钮,就已经执行ztree里面的删除节点事件function zTreeOnRemove(event, treeId, treeNode)

造成这个问题。

解决办法:弃用ztree自带的节点删除

原来的方法:

// 删除之前事件
function zTreeBeforeRemove(treeId, treeNode) {
var flag = true;
$.ajax({
url : basePath + "/organ/isDel/" + treeNode.id,
type : "get",
async : false,
success : function(data) {
if(data == 0){
/alert(i18n_unDel);/
layer.msg('i18n_unDel',{icon:5,time:1000});
flag = false;
}else{
/flag = confirm(i18n_conf);/
flag =layer.confirm("确认要删除吗,删除后不能恢复", { title: "删除确认" }, function (index) {
layer.close(index);
});
}
}
});
return flag;
}

// 删除节点事件
function zTreeOnRemove(event, treeId, treeNode) {
$.ajax({
url : basePath + "/organ/" + treeNode.id,
type : "DELETE",
success : function(data) {
initTree();
}
});
}

修改之后:

// 删除之前事件
function zTreeBeforeRemove(treeId, treeNode) {
    layer.confirm("确认要删除吗,删除后不能恢复", { title: "删除确认" }, function (index) {
        new Promise(function(resolve,reject){
            $.ajax({
                url : basePath + "/organ/isDel/" + treeNode.id,
                type : "get",
                async : false,
                success : function(data) {
                    if(data == 0){
                    layer.msg('i18n_unDel',{icon:5,time:1000});
                        
                    }else{
                        return resolve(null)
                    }           
                }
            });
        }).then(function(){
            $.ajax({
                url : basePath + "/organ/" + treeNode.id,
                type : "DELETE",
                success : function(data) {
                        initTree();
                        return Promise.resolve(null)
                }
            });
        }).then(function(){
            zTreeObj.removeNode(treeNode,false)
            layer.close(index);
        }).catch(function(error){
            if(error){
                layer.msg(error,{icon:5,time:1000});
            }
        })
    });
    return false;
}

// 删除节点事件
function zTreeOnRemove(event, treeId, treeNode) {
}

原文作者:祈澈姑娘 技术博客:https://www.jianshu.com/u/05f416aefbe1
90后前端妹子,爱编程,爱运营,文艺与代码齐飞,魅力与智慧共存的程序媛一枚。

相关文章

  • layer弹框删除ztree节点非阻塞问题解决

    在ztree里面,删除一个节点的时候,会弹出一个弹框询问,是否删除,本来用的是网页自带的confirm弹框,根据公...

  • layer+zTree实现弹出框+树形图

    参考文献 layer弹出框,zTree树插件,树形图 zTree官网 手把手教你学zTree 弹层组件文档 - l...

  • 开发

    格式 编辑弹框 删除弹框

  • About layer pop-up

    如果layer弹出框中还需要再弹出其他弹框,设置layer的type值为1(页面层)

  • 一些问题及解决办法——使用篇

    1、Layer open类型为iframe时,关闭弹框的方法:parent.layer.closeAll(); 2...

  • jquery 事件冒泡

    弹框组织冒泡 事件委托 节点

  • 前端插件

    ztree Q:取treeObj对象没问题,获取所有选中节点,弹出空(非null)A:getSelectedNod...

  • selenium之Alert

    删除一个话题,点击页面上的删除按钮的时候,会有弹框,selenium针对弹框的API为Alert from sel...

  • js实现layer弹框

    *{ padding: 0...

  • java 并发集合

    阻塞集合和非阻塞集合 阻塞集合在增加或删除元素时如果集合已经满了或者集合为空会阻塞。 非阻塞集合不会阻塞而是根据不...

网友评论

    本文标题:layer弹框删除ztree节点非阻塞问题解决

    本文链接:https://www.haomeiwen.com/subject/jocgyctx.html