layui教程(一) form 表单的提交问题

本文详细介绍使用layui框架实现弹窗表单提交的具体方法,包括父页面打开子页面的代码配置,子页面表单提交的按钮设置,以及通过ajax进行数据提交的过程。文章还特别提醒在form.on()表单监控事件中加入return false;的重要性。

点击打开表单页面(弹出层形式)如:   

 

父页面打开子页面的代码

layer.open({
	  		type:2,          //类型为1时可以为html,和代码,为2时页面地址
	  		title: title,    //弹出层的标题
	  		area: [width, heigth],  //大小
	  		fixed: false, //不固定     
	          maxmin: true, 
	          content: url,        //弹出层的地址
	          btn: ['确定', '取消'],   //按钮名称
	          yes: function(index,layero){
	          	var submit = layero.find('iframe').contents().find(submitButId);   //子页面提交表单的按钮
	          	submit.click();  //按钮提交表单
	          	return false;
	          },
	          btn2: function(){
	            layer.closeAll();
	          },
	          zIndex: layer.zIndex, //重点1
	          success: function(layero,index){
//	             layer.setTop(layero); //重点2
	        	 layer.iframeAuto(index);
	          }
	});

子页面提交表单的按钮代码

<button style="display:none" lay-submit lay-filter="submitBut" id="submitBut"></button>
//按钮样式为隐藏,当点击弹出层的确定按钮时,相当于提交表单

 

子页面提交表单代码

form.on('submit(submitBut)', function(data){
	 var loading = layer.msg('正在保存', {icon: 16, shade: 0.3, time:0});
	   $.ajax({
		         method:"POST",
			   	 url:saveUrl,       //提交表单的地址
			   	 data:data,      //提交表单的数据
			   	 success:function(res){
			   		 if(res.stateType == 0){
			   			 var index = parent.layer.getFrameIndex(window.name);
		   			      parent.layer.close(index);  
		   			  	  parent.layer.msg(res.stateMsg, { icon: 1});
		   			      parent.layui.table.reload(tableName);
					}else{
						  layer.msg(res.stateMsg,{icon: 2});
				    }
			   	 },
			   	 error:function(){
			   		 console.log("caozuosibai")
			   		 layer.close(loading);
			   		 layer.msg('操作失败',{icon: 2});
			   	 }
			});
	  	     return false;  //防止表单提交两次
        }); 

注意:form.on()表单监控事件中一定要加 return false;如果不加的话,后端不会报错,而前端代码中会运行到error中,不同浏览器也有不同效果,谷歌浏览器有时会报错,火狐和其他浏览器100%报错

 

 

 

可以使用 layui表单提交监听函数来实现多个表单提交个的效果。 首先,给每个需要提交表单设置个唯的 id,然后在页面加载完成后,使用 layuiform.on() 方法监听表单提交事件,当任意表单提交时,获取该表单的数据并存储到个全局变量中,然后阻止表单提交。当最后表单提交时,将存储的所有表单数据合并,然后使用 ajax 提交数据并清空存储的数据。 示例代码如下: HTML: ```html <!-- 表单1 --> <form class="layui-form" id="form1"> <div class="layui-form-item"> <label class="layui-form-label">用户名</label> <div class="layui-input-block"> <input type="text" name="username" required lay-verify="required" placeholder="请输入用户名" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">密码</label> <div class="layui-input-block"> <input type="password" name="password" required lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="form1">提交</button> </div> </div> </form> <!-- 表单2 --> <form class="layui-form" id="form2"> <div class="layui-form-item"> <label class="layui-form-label">姓名</label> <div class="layui-input-block"> <input type="text" name="name" required lay-verify="required" placeholder="请输入姓名" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">年龄</label> <div class="layui-input-block"> <input type="number" name="age" required lay-verify="required" placeholder="请输入年龄" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="form2">提交</button> </div> </div> </form> ``` JavaScript: ```javascript // 定义个全局变量,用于存储所有表单数据 var formData = {}; // 监听表单提交事件 layui.form.on('submit', function(data){ // 获取表单 id 和数据 var id = data.form.attr('id'); var data = data.field; // 将数据存储到全局变量中 formData[id] = data; // 如果不是最后表单提交,则阻止表单提交 if (Object.keys(formData).length < 2) { return false; } // 合并所有表单数据 var allData = {}; for (var key in formData) { allData = Object.assign(allData, formData[key]); } // 使用 ajax 提交数据 $.ajax({ url: 'http://example.com/submit', type: 'POST', data: allData, success: function(){ // 清空全局变量 formData = {}; // 提示用户提交成功 layer.msg('提交成功'); }, error: function(){ // 提示用户提交失败 layer.msg('提交失败,请重试'); } }); }); ``` 在上面的代码中,我们使用了 Object.keys() 方法来获取 formData 对象中属性的数量,然后判断当前提交表单是否为最后表单。如果不是最后表单,则阻止表单提交。最后表单提交时,我们使用 Object.assign() 方法将所有表单数据合并为个对象,然后使用 ajax 提交数据。在提交成功或失败后,我们清空 formData 对象并提示用户。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值