使用layer.open打开自定义弹窗,获取表单内容发送到后端

layui.layer弹层组件官方文档

layer.open的type参数有5个不同的值,如果要自定义弹窗内容,可以使用 type: 1(页面层)。
使用页面层,则参数content可填写html或使用dom,本次我使用的dom方法。

1、首先在body外编写一个表单(主要是防止被其他元素所影响)
<form action="" id="create_table_from" class="layui-form" lay-filter="create_table_from" style="display: none;">
    <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">
            <select name="type_id" lay-verify="required">
                <option value=""></option>
                <option value="1">默认分类</option>
            </select>
        </div>
    </div>
    <div class="layui-form-item layui-form-text">
        <label class="layui-form-label">工单说明</label>
        <div class="layui-input-block">
            <textarea name="description" placeholder="请输入工单说明" class="layui-textarea"></textarea>
        </div>
    </div>
</form>
  • 一定要设置好form的id以及lay-filter参数,方便后续获取表单
  • 表单需要先隐藏display: none;
2、表单写好后,开始配置layer.open参数
layer.open({
	//基本层类型
    type:1,
	//宽高
    area:['600px','500px'],
    //标题
    title: '创建新工单',
    //内容
    content: $('#create_table_from'),
    //按钮
    btn:['创建','取消'],
    //确定按钮
    yes:() => {
    	//开启loading
        const loading = layer.load(2);
        //获取表单内的所有值
        const formData = layui.form.val("create_table_from");
        //发送数据到接口
        $.post('__URL__/table/post_table', formData, (res)=>{
        	//关闭loading
            layer.close(loading);
            console.log(res);
        });
    },
});
  • 通过layui.form.val()来获取表单内的所有值,参数为html中lay-filter设置的值

效果图:

在这里插入图片描述

  • 本次代码中有引入JQ
使用`layui`打开弹窗并提交含有文件的表单到ThinkPHP 3.2的后端,你可以按照以下步骤操作: 1. 引入必要的layui组件[^1]: ```javascript layui.use(['form', 'layer','layedit', 'laydate','upload'], function(){ var form = layui.form; //... }); ``` 2. 创建一个表单元素,设置好`lay上传`插件: ```html <form id="uploadForm" lay-filter="uploadForm"> <!-- ... --> <div class="layui-upload layui-upload多-file"> <button type="button" id="fileSelect">选择文件</button> <div class="layui-upload-list"></div> </div> <!-- ... --> </form> ``` 3. 当点击按钮时,调用`layer.open`显示弹窗,并将表单关联到Ajax提交上[^2]: ```javascript $("#fileSelect").click(function(){ layer.open({ type: 2, shadeClose: true, // 关闭遮罩层时自动关闭弹窗 title: '上传文件', content: $("#uploadForm"), // 使用表单ID作为弹窗内容 area: ['auto', 'auto'], btn: ['确定', '取消'], // 提交和取消按钮 success: function(index){ form.on('submit(uploadForm)', function(data){ var fileData = $(this).find('.layui-upload').upload().files; // 获取文件数据 $.ajax({ url: '/your_controller/upload', // 替换为你实际的后台接口地址 type: 'POST', data: form.serialize(), // 表单序列化后的数据 files: fileData, // 文件数据 dataType: 'json', // 设置预期响应类型 success: function(res){ if(res.status === 'success'){ console.log('表单提交成功:', res.data); layer.msg(res.message, {icon: 6}); // 显示消息提示 } else { layer.alert(res.message, {icon: 5}); // 处理错误情况 } }, error: function(xhr, status, error){ layer.alert('上传失败:', {icon: 5}); } }); return false; // 阻止默认表单提交行为 }); } }); }); ``` 4. 后台控制器(如`UploadController`)接收表单数据,存储文件并返回JSON响应: ```php public function upload(Request $request) { $file = $request->file('file'); // 获取上传的文件 // 存储文件逻辑... $data = [ 'message' => '文件上传成功', 'status' => 'success' ]; return json($data); } ``` 相关问题: 1. 如何处理表单提交时的验证错误? 2. 怎样在服务器端限制上传文件的大小或类型? 3. `lay上传`插件如何处理文件上传失败的情况?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值