layui 使用 layer.open 打开新页面时 常见问题

    layer.open  代码使用如下

  table.on('tool(orderGuestRoomTable)', function (obj) {
            /*订单详情*/
            if (obj.event === "detail") {
                let btn = [];
                if (obj.data.status == 0) {
                    btn = ['派遣订单', '取消订单','返回'];
                } else {
                    btn = ['取消订单','返回'];
                }
                if (obj.data.status == 4 || obj.data.status == 13 || obj.data.status == 5) {
                    btn = ['返回'];
                }
                localStorage.setItem("orderInfo", JSON.stringify(obj.data))

                layer.open({
                    type: 2,
                    title: '订单详情',
                    content: 'form/orderDetail.html?id=10',
                    maxmin: false,
                    area: ['800px', '620px'],
                    btn: btn,
                    btn1: function (index, layero) {
                        console.log(btn)
                        return false;
                        if( btn[index-1] == '派遣订单') {
                            let submit2 = layero.find('iframe').contents().find("#dispatcher-order-submit");
                            submit2.trigger('click');
                        }else if(btn[index-1] == '取消订单'){
                            let submit = layero.find('iframe').contents().find("#cancel-order-submit");
                            submit.trigger('click');
                        }else{
                            parent.location.reload();
                        }
                    },
                    btn2: function (index, layero) {
                        if(btn[index] == '取消订单'){
                            let submit = layero.find('iframe').contents().find("#cancel-order-submit");
                            submit.trigger('click');
                        }
                    }
                });
            }
        });

1. 在content 为页面路径时如何将参数传递到对应页面?

   方式有两种  a 使用本地缓存  localStorage.setItem("orderInfo", JSON.stringify(obj.data))  这种方式在对应页面直接从缓存中获取

                       b  使用url传递  form/orderDetail.html?id=10  使用这种方式需要在对应的页面使用特定的方法进行接收

 let request = (function () {
            let obj = {};
            let arr = window.location.search.slice(1).split("&");
            for (let i = 0, len = arr.length; i < len; i++) {
                let nv = arr[i].split("=");
                obj[unescape(nv[0]).toLowerCase()] = unescape(nv[1]);
            }
            return obj;
        })()
 let id = request.id  // id 为传递的参数名

    2. 如何自定义按钮功能?

     如  开头代码,使用btn1: btn2: ......   即可自定自己的按钮功能

   3. 以为一般情况我们需要使用外面的按钮来控制打开的页面的表单提交,所以如何控制呢?

       a.在打开面预留提交按钮,但需要隐藏

    <div class="layui-form-item layui-hide">
        <input type="button" lay-submit lay-filter="cancel-order-submit" id="cancel-order-submit">
        <input type="button" lay-submit lay-filter="dispatcher-order-submit" id="dispatcher-order-submit">
    </div>

     b.通过外部按钮绑定内部事件

 btn2: function (index, layero) {
           if(btn[index] == '取消订单'){    
                // 核心 
               let submit = layero.find('iframe').contents().find("#cancel-order-submit");
                  submit.trigger('click');
                }
             }

      c.在内部页面监听表单提交事件


      form.on('submit(cancel-order-submit)', function () {
            sendPostJSON(cancelOrderUrl, {
                orderNo:vue.order.orderNo,
            },function (res) {
                if(res.code == 200){
                    layer.msg("取消成功",{time:1000},function () {
                        parent.location.reload();
                    })

                }else{
                    alertError(res)
                }
            })
            return false
        })

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值