业务场景是需要根据json来注入嵌入的iframe 表单的值,其中json的key就是表单元素的name value是元素的值,本来以为很简单,思路先是通过获取iframe 里的对应name的元素,再判断元素 type,如果是text 就直接赋值,如果是单选,就根据json的value来匹配对应的单选的值的那个元素,再设置选中,但在设置单选框选中这一环节卡住了,虽然获取到了单选框对应值的元素,但是没办法让其显示为选中状态,属性设置的是checked=true 但就是选中不上,用了 attr prop都没用,因为iframe 引入的那个表单用的是layUi 框架,但是父级界面没有使用layUI,看到网上说设置后 须再次渲染,使用form.render(),显然父级窗口没有用layUi,很自然报错 $().render() is not a funciton
父级窗口在操作iframe 嵌套的layui的radio 时,使用
$(element[i]).next().click();
即可解决问题,其中element[i]指的是radio元素。
完整代码如下:
var iframe=document.getElementById("loadForm").contentWindow;
var dataStr=$("#showData").val();
if(!isEmpty(dataStr)){
var dataJson=JSON.parse(dataStr);
console.log(dataJson);
for(var key in dataJson){
//TODO 根据key获取iframe里的元素,判断其type 根据type来注入key获取的值 并将元素 设置为不可编辑
var element=iframe.document.getElementsByName(key);
var type=element[0].getAttribute("type");
if(type=="text"){
element[0].value=dataJson[key];
element[0].setAttribute("disabled",true);
}else if(type=="radio"){
for(var i=0;i<element.length;i++){
if(element[i].value==dataJson[key]){
$(element[i]).next().click();
}
element[i].setAttribute("disabled",true);
}
}
}