一个关于 form 渲染特殊用法的解决方案。

需求 :
项目中需要做一个带参导入功能 , 画面效果如下图:

遇到的问题 :
- 弹窗中 select 不显示
 
- select 显示后 , 选中某项时无法把值传入后台
 
解决办法 :
- 在弹窗的 success 中使用 form.render(‘select’) 重新渲染select
 
- 在弹窗的 success 中增加 select 切换事件监听 , 然后使用变量 uploader 承接 upload.render , 在监听到 select 切换时 , 使用 uploader.config.data = {‘asset_type’: data.value} 来更新 upload 中的 data 参数 , 最后再给 upload 增加 before 参数 , 来接收不切换 select 时的 data 值 .
 
代码 :
html :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
   | <script id="importTpl" type="text/html">     <form class="layui-form layui-form-pane " method="POST"  onsubmit="return false" >         <div style="padding: 15px;width:400px;margin:0 auto;">             <div class="layui-form-item" >                 <label class="layui-form-label">导入文件类型</label>                 <div class="layui-input-block">                     <select name="asset_type" id='asset_type' lay-filter="asset_type">                         <option value="1" selected>个人贷款</option>                         <option value="4">票据</option>                     </select>                 </div>             </div>             <div class="layui-form-item" >                 <button type="button" class="layui-btn layui-btn-primary" id="import">                     <i class="layui-icon"></i>                     选择文件                 </button>             </div>
              <div class="layui-row" >                 <button class="layui-btn do-import layui-btn-danger " type="button">                     确定导入                 </button>             </div>         </div>     </form> </script>
   | 
 
javascript :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
   | $('#asset-import').click(function () {     layer.open({         area: ['450px', '250px'],         title: '项目导入',         type: 1,         content: $('#importTpl').html(),         success: function (layero, index) {             form.render('select');
              form.on('select', function (data) {                 uploader.config.data = {'asset_type': data.value};             });             var uploader = upload.render({                 url: '/reg/asset-import'                 , elem: '#import'                 , accept: 'file'                 , auto: false                 , bindAction: '.do-import'                 , before: function (obj) {                         uploader.config.data = {'asset_type': $('#asset_type').val()};                 }                 , done: function (res) {                     layer.close(index);                     if (res.code == 0) {                         layer.msg(res.msg, {icon: 1});                     } else {                         layer.alert(res.msg, {icon: 2});                     }                 }             });         }     }); });
  |