iframe渲染表单数据

本文介绍如何在iframe中使用Vue框架,通过数据双向绑定实现父层页面与子层页面间的数据传递,特别是在表单中自动渲染和检查数据。在子层页面的form表单中隐藏提交按钮,利用Vue的特性,可以在用户修改时自动获取并显示之前设置的值,同时讨论了可能存在的冲突问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iframe渲染表单数据

父层页面调用子层页面时,利用iframe的形式打开页面,父层与子层之间传递数据

父层页面

//layui窗口打开一个iframe 
layer.open({
      type: 2
      ,title: '修改账户'
    //url
      ,content: 'form.html'
      ,area: ['420px', '420px']
      ,btn: ['修改', '取消']
    //打开窗口成功后的操作
      ,success:function(layero, index){
        //获取新窗口对象
        var iframeWindow = window['layui-layer-iframe'+ index];
        //重新渲染
        layui.$.ajax({
          type: 'post',
          url: localhostHead + '/user/info/' + userid,
          dataType: "json",
          contentType: "application/json",
          success: function (data) {
              //渲染表单
            //调用子层定义的方法
            iframeWindow.setdata(data.data);   
          
          }
        });
          
               
        //form.render();
        //layui.form('select').render()
      }
    //当iframe点击确定按钮时的操作
      ,yes: function(index, layero){
        var iframeWindow = window['layui-layer-iframe'+ index]
        ,submit = layero.find('iframe').contents().find("#LAY-user-submit");
                  
          //监听提交
          iframeWindow.layui.form.on('submit(LAY-user-submit)', function(data){
            var  field= data.field; //获取提交的字段
            field["id"]=userid;
            //提交 Ajax 成功后,静态更新表格中的数据
                   
            layer.close(index); //关闭弹层
          });  
          
          submit.trigger('click');
        }
      }); 

子层页面

function setdata(data) {
          //渲染表单
          layui.use('form', function(){
              var form = layui.form;
              //根据的type类型修改
              form.val("layuiadmin-form-admin", { //formTest 即 class="layui-form" 所在元素属性 lay-filter="" 对应的值
                  "userName": data.userName// "name": "value",
              });
 
              console.log(data);
          });

    };

效果:打开iframe窗口时查询表格点击行的值后自动渲染数据,实现用户修改时自动获取之前设置好的值的功能

注意事项:

在iframe层的form表单隐藏一个提交按钮,可实现检查表单填写的数据是否正确的功能

 <div class="layui-form-item layui-hide">
      <input type="button" lay-submit lay-filter="LAY-user-submit" id="LAY-user-submit" value="确认">
    </div>

结合vue,js

突然想到vue框架可以进行数据双向绑定,炒鸡耐用,不过不知道会不会出现冲突啊

骚一把

  1. 导入vue
  1. 在表单的父层div 加上id

  2. 给每个表单的子组件加上v-model进行双向数据绑定

     <input type="text" v-model="userName" name="userName" lay-verify="" placeholder="请输入用户名" autocomplete="off" class="layui-input">
    
  3. 在js中赋数据

    //用vue双向绑定渲染表单let rua=new Vue({
    
        //div的id
    ​      el:"#layuiadmin-form-admin",
    
    ​      data:data//data:{}});
    
### 将Java生成的支付宝Form表单嵌入到HTML iframe元素 为了实现将由Java生成的支付宝支付`<form>`表单嵌入到HTML `<iframe>`元素中,可以采用服务器端渲染的方式,在服务端构建完整的HTML页面并将其返回给客户端浏览器。具体来说: #### 创建动态HTML响应 在Java Web应用程序中创建一个Servlet或其他类型的控制器来处理请求,并生成包含所需`<iframe>`标签及其内容(即支付宝支付表单)的HTML文档。 ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String formContent = "<!DOCTYPE html>\n" + "<html lang=\"en\">\n" + "<head>\n" + " <meta charset=\"UTF-8\">\n" + " <title>Payment Form</title>\n" + "</head>\n" + "<body>\n" + " <!-- 嵌套支付宝支付表单 -->\n" + " <iframe srcdoc='" + generateAlipayForm() + "' width='100%' height='500px'></iframe>\n" + "</body>\n" + "</html>"; response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { out.println(formContent); } } ``` 其中`generateAlipayForm()`方法负责组装实际的支付宝支付表单项[^1]。 #### 构建支付宝支付表单字符串 此函数应根据业务逻辑填充必要的参数值,并确保最终得到的是合法有效的HTML片段形式的字符串表示法。 ```java private static String generateAlipayForm(){ StringBuilder sb = new StringBuilder(); sb.append("<form id='alipayment' action='https://example.com/alipay/gateway.do' method='post'>\n"); // 添加隐藏字段用于传递交易详情数据 sb.append(" <input type='hidden' name='WIDout_trade_no' value='201709121234567890'/>\n"); sb.append(" <input type='hidden' name='WIDsubject' value='测试商品名称'/> \n"); sb.append(" <input type='hidden' name='WIDtotal_amount' value='0.01'/> \n"); sb.append("</form>"); return sb.toString().replaceAll("\r\n", "").replaceAll("\n", ""); } ``` 注意这里替换掉了所有的换行符以保证整个表单能够被正确解析为单一的`srcdoc`属性值的一部分。 通过这种方式可以在不改变现有架构的前提下轻松地完成目标功能开发工作。同时由于所有敏感信息均是在后台程序内部构造完毕后再发送至前端展示层面上显示出来的,因此安全性也得到了保障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值