最近遇到一个问题,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 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录