关于layui中弹窗中select获取父窗口值遇到得问题

layui 弹窗 父窗口 下拉框

最近在做一个作业,用到layui的open弹窗,本来以为直接调用封装好的方法十分简单,没想到遇到一个bug解决了很久,在此记录一下:

预想功能

在这里插入图片描述
父页面按钮点击修改信息,触发弹窗,弹窗中表单保留原父窗口的数据,在此基础上修改
附上代码:
在这里插入图片描述
通过layer.getChildFrame 方法找到子窗口,然后一个个设置子窗口表单的值,curStatus对应的是一个下拉框,选择器查找到数据对应的option然后设置selected属性。
此时运行,得出结果如下:
在这里插入图片描述
其他数据都顺利显示了,但是这时我发现,我选中的数据状态那一栏应该是“入住”,却显示空闲,这时我点开下拉框发现,其实是顺利设置了值的,但却没有显示:
在这里插入图片描述
这让我百思不得其解,然后我在子窗口获取了一下下拉框选中的值打印,却发现控制台打印的是空闲!
这时候,我又接着去获取表单的其他值(类型,电话)
console.log("子窗口中房间类型为:"+$("#roomType").val());
打印如下:
在这里插入图片描述
发现居然没有获取到,这时我在F12 ELEMENTS中发现确实表单中没有值。最后我翻了很久layui的文档,终于发现问题出在,我在父窗口设置子窗口的值的时候,用的是success这个回调函数,而这个函数在文档中写着是弹层弹出完毕后才调用的!
我的理解是,在这个弹层弹出完毕后,该页面已经渲染完毕,之后才在父窗口设置子窗口的值,而这时候因为页面已经渲染完毕了,所以实际上没有设置到值,至于为什么会显示我至今还没想明白。
解决办法:
想到父页面能设置子页面的值,于是子页面也能获取到父页面的值。在父页面定义了一个隐藏的文本框:

<input type="hidden" id="selectValue"/>

并且在下面,success回调函数之前的位置,将表格中下拉框对应的值设置到这个隐藏文本框

 $("#selectValue").val(data["curStatus"]);

在子窗口中如下:

// 获取父窗口中存储的下拉框选中的值
        var select = parent.$("#selectValue").val();
//找到指定下拉框,设置选中
        $("#curStatus option[value = "+select+"]").prop("selected",true);
        //渲染表单中的下拉框!!
        form.render('select');

这样子,最终结果就是我想要的了,但是一定要注意的是,一定最后要渲染表单中的下拉框,不然也是不会显示的!
感觉自己的方法还存在很多问题,新接触这个layui有许多不熟悉的地方,尚在寻找更好的办法!

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值