最近遇到一个问题,ModelForm的表单使用layui弹出层组件渲染时,表单选择框不能正常显示,且不能进行选择,经过研究发现,是由于 layui 的样式冲突或者事件绑定问题所致。可以在弹出层显示后手动触发 layui 的渲染来解决这个问题,将 layui 的 form.render() 方法添加到您的弹出层代码中。

  • 首先创建好ModelForm表单
class Users(ModelForm):
    """表单"""
    class Meta:
        model = Users
        fields = ['name', 'email', 'phone'...]
        }
  • 前端代码
<script>
  var form_html = `
    <form class="layui-form" style="margin: 20px;">
        <div class="layui-form-item">
            <div class="layui-input-wrap ">
                {% csrf_token %}
                {{ form }}
            </div>
            <div class="layui-input-wrap layui-right" style="margin-top: 20px;margin-right: 20px;">
                <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                <button class="layui-btn layui-btn-normal" lay-submit="add_btn" lay-filter="edit_btn"
                    id="add_btn">立即提交</button>
            </div>
        </div>
    </form>
  `;

  layer.open({
    type: 1,
    area: ['500px', '300px'],
    title: '表单',
    shade: 0.6,
    shadeClose: true,
    maxmin: true,
    anim: 0,
    content: form_html,
    success: function (layero, index) {
        layui.use('form', function(){
        var form = layui.form;
        form.render(); // 注意这里,需要手动触发 layui 渲染,因为目前的的弹出层和渲染冲突了。
        });
    }
  });


     // 监听表单提交事件
    $(document).on('submit', 'form.layui-form', function(e){
        e.preventDefault(); // 阻止表单默认提交行为
        var formData = $(this).serialize(); // 获取表单数据
        $.ajax({
            url: '',
            type: 'POST',
            data: formData,
            success: function(res){
                // 处理成功响应的逻辑
             ...

            },
            error: function(xhr, status, error){
                // 处理错误响应的逻辑
                ...
                console.error(error);
            }
        });
    });

</script>
分类: Django 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录