问题描述:
父页面点击 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隐藏标签肯定是有值的了。
本文介绍使用layui框架在父页面通过layer.open()方法打开子页面时,如何正确传递和获取隐藏输入框的值。讨论了父页面与子页面交互的具体实现方式,并解决了子页面加载时无法获取到值的问题。

1593

被折叠的 条评论
为什么被折叠?



