解决使用layui对select append元素无效或者未及时更新的问题


Posted in Javascript onSeptember 18, 2019

一、问题

本人在使用layui使用了select按钮,点击是js脚本会异步请求后台接口获取json数据,然后layui将json数据渲染到select上,然而获取接口数据没有问题,就是无法更新。

本人使用代码如下:

<div class="main layui-clear">
  <div class="fly-panel" pad20>
    <h2 class="page-title">发布帖子</h2>
 
    <div class="layui-form layui-form-pane">
      <form method="post">
        <div class="layui-form-item">
          <label for="L_title" class="layui-form-label">标题</label>
          <div class="layui-input-block">
            <input type="text" id="L_title" name="title" required lay-verify="required" autocomplete="off"
                class="layui-input">
          </div>
        </div>
        <div class="layui-form-item layui-form-text">
          <div class="layui-input-block">
            <textarea id="L_content" name="content" placeholder="请输入内容" class="layui-textarea fly-editor"
                 style="height: 260px;"></textarea>
          </div>
          <label for="L_content" class="layui-form-label" style="top: -2px;">描述</label>
        </div>
        <div class="layui-form-item">
          <div class="layui-inline">
            <label class="layui-form-label">标签选择框</label>
            <div class="layui-input-block">
              <div class="layui-input-inline" onclick="">
                <script id="labels" type="text/html">
                  {{# layui.each(d.data, function(index,item){ }}
                    <option value="{{item.id}}">{{item.name}}</option>
                  {{# }); }}
                </script>
                <select name="modules" lay-search="" id="label_select" name="labelId">
                </select>
              </div>
            </div>
          </div>
        </div>
        <div class="layui-form-item">
          <button class="layui-btn" lay-filter="*" lay-submit>立即发布</button>
        </div>
      </form>
    </div>
  </div>
</div>

js 脚本如下(该代码是修改后的,添加了修改后的关键代码,下面有提示):

<script>
  layui.use(['form', 'laytpl', 'layedit'], function () {
    var form = layui.form,
      layedit = layui.layedit,
      layer = layui.layer,
      laytpl = layui.laytpl;
    //添加option
    $.get(quark_label_getall_api, function (data) {
      data = $.parseJSON(data);
      if (data.status == 200) {
        var tpl = $("#labels").html();
        laytpl(tpl).render(data, function (html) {
          $("#label_select").append(html);
          var form = layui.form
          form.render();
        });
      } else {
        layer.msg(data.error, {icon: 5});
      }
    });
    layedit.set({
      uploadImage: {
        url: quark_upload_api,
        type: 'post' //默认post
      }
    });
    var content = layedit.build('L_content'); //建立编辑器
    form.on('submit(*)', function (data) {
      var layeditval = layedit.getContent(content);
      if (layeditval == "" || layeditval == undefined || layeditval == null) {
        layer.msg("输入的内容不能为空", {icon: 7});
        return false;
      }
      $.post(quark_posts_add_api, {
          title: data.field.title,
          content: layedit.getContent(content),
          labelId: data.field.labelId,
          token: getCookie()
        },
        function (data) {
          //data=$.parseJSON(data);
          if (data.status == 200) {
            layer.msg("发布成功", {
              icon: 1,
              time: 1000 //1秒关闭
            }, function () {
              location.href = "/pages/index";
            });
          } else if (data.status == 400) {
            layer.msg(data.error, {icon: 7});
          } else {
            layer.msg(data.error, {icon: 5});
          }
        }, "json");
      return false;
    });
  });
  //封装查询参数
  function getData(data) {
    var param = {};
    param.title = data.title;
    param.labelId = data.labelId;
    param.token = getCookie();
    return param;
  }
</script>

二、解决办法:

Layui会对select、checkbox、radio等原始元素隐藏,从而进行美化修饰处理。但这需要依赖于form组件,所以必须加载 form,并且执行一个实例。导航的Hover效果、Tab选项卡等同理(它们需依赖 element 模块)

所以当新添加这些元素时需要对页面表单元素重新渲染一下,需要模仿下面添加关键代码

layui.use('form', function(){
 var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
 
 //……
 
 //但是,如果你的HTML是动态生成的,自动渲染就会失效
 //因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
 form.render();
});

最后js异步获取的数据可以在select上及时显示了

效果图:

解决使用layui对select append元素无效或者未及时更新的问题

以上这篇解决使用layui对select append元素无效或者未及时更新的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Gird组件 Part-3:范例RSSFeed Viewer
Mar 10 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
Apr 10 Javascript
jquery 日期分离成年月日的代码
May 14 Javascript
不同浏览器的怪癖小结
Jul 11 Javascript
javascript中创建对象的三种常用方法
Dec 30 Javascript
javascript 星级评分效果(手写)
Dec 24 Javascript
js修改table中Td的值(定义td的双击事件)
Jan 10 Javascript
验证码按回车不变解决方法
Mar 29 Javascript
node+express+ejs使用模版引擎做的一个示例demo
Sep 18 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
Sep 26 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
Apr 19 Javascript
extjs图形绘制之饼图实现方法分析
Mar 06 Javascript
Flutter实现仿微信底部菜单栏功能
Sep 18 #Javascript
详解element-ui中表单验证的三种方式
Sep 18 #Javascript
layui的布局和表格的渲染以及动态生成表格的方法
Sep 18 #Javascript
vue中使用element组件时事件想要传递其他参数的问题
Sep 18 #Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
Sep 18 #Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
Sep 18 #Javascript
解决layer 动态加载select 失效的问题
Sep 18 #Javascript
You might like
用Socket发送电子邮件
2006/10/09 PHP
UCenter Home二次开发指南
2009/05/28 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
2010/07/29 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
jquery构造器的实现代码小结
2011/05/16 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
Python通过poll实现异步IO的方法
2015/06/04 Python
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
美国排名第一的葡萄酒俱乐部:Firstleaf Wine Club
2020/01/02 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
C语言50道问题
2014/10/23 面试题
局域网标准
2016/09/10 面试题
保护动物倡议书
2014/04/15 职场文书
《秋游》教学反思
2014/04/24 职场文书