0、layui.open iframe子页面有时获取不到值

本文介绍使用layui框架在父页面通过layer.open()方法打开子页面时,如何正确传递和获取隐藏输入框的值。讨论了父页面与子页面交互的具体实现方式,并解决了子页面加载时无法获取到值的问题。

问题描述:

父页面点击 layui.open() 打开子页面,子页面中获取input隐藏值为空。

父页面 list.html:

function add(data){
	var index = layui.layer.open({
		title : "添加",			
		type : 2, //0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
		content : "add.html",
		success : function(layero, index){
			console.log("-------------------父页面")
			var body = layui.layer.getChildFrame('body', index);
			// 获取子iframe
			var iframe = window['layui-layer-iframe' + index];
			if(data){								
				body.find("input[name='id']").val(data.id);
				body.find("input[name='unitId']").val(data.unitId);
                body.find("#unitIdHide").val(data.unitId);
                body.find("input[name='status']").val(data.status);
				// 调用子页面赋值
				iframe.viewObj.moneyBaseData=data;
				// 调用子页面初始方法
				iframe.initData();
			}
			// 如果,子页面<input type="radio" name="status"> 没有渲染显示,需要重新渲染一下。
			//iframe.layui.form.render();
		}
	});
}

子页面 add.html:

<input type="hidden" id="unitIdHide">
<script type="text/javascript">
window.viewObj={
	moneyBaseData: ''
}
layui.use(['form', 'jquery'], function(){
	var form = layui.form
		,$ = layui.jquery
		,layer = layui.layer;
	console.log("-------------------子页面");
   initData();
	// 将函数放入窗口
	window.initData= function(){
        initData();
	};
	// 初始化数据
	function initData(){
      console.log("-------------------子页面 initData 执行...");
      console.log($("#unitIdHide").val());
	}
});
</script>

 分析:

点击父页面 index.html 的 add方法,layer.open()打开子页面,子页面加载执行DOM和JS。在子页面中先执行 layui.use()外面,再执行layui.use()里面。

此时,子页面执行到 initData(); 时,隐藏标签 unitIdHide是没有值的。因为,还没有父页面的 layer.open() success 回调方法还没有执行。

父页面的 layer.open() success 回调方法,要等子页面执行完,才会回调执行。所有的赋值都在父页面的 layer.open() success 回调方法里面。

自然,子页面的 unitIdHide标签一开始就获取不到值了。但是,可以在父页面 layer.open() success 回调方法中,调用子页面的 initData()方法。

这时,子页面的 unitIdHide隐藏标签肯定是有值的了。

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值