解决使用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 相关文章推荐
jQuery中find()方法用法实例
Jan 07 Javascript
jQuery实现的左右移动焦点图效果
Jan 14 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
Jan 23 Javascript
原生JS实现圣旨卷轴展开效果
Mar 06 Javascript
微信小程序 图片加载(本地,网路)实例详解
Mar 10 Javascript
xmlplus组件设计系列之图标(ICON)(1)
May 05 Javascript
vue.js实现带日期星期的数字时钟功能示例
Aug 28 Javascript
在Angular中使用JWT认证方法示例
Sep 10 Javascript
使用webpack搭建vue环境的教程详解
Dec 31 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
Mar 25 Javascript
Vue props中Object和Array设置默认值操作
Jul 30 Javascript
Vue.extend 登录注册模态框的实现
Dec 29 Vue.js
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
由php if 想到的些问题
2008/03/22 PHP
php学习笔记之面向对象
2014/11/08 PHP
php内存缓存实现方法
2015/01/24 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
Javascript this关键字使用分析
2008/10/21 Javascript
javascript 避免闭包引发的问题
2009/03/17 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
linux 下实现python多版本安装实践
2014/11/18 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
Django数据库表反向生成实例解析
2018/02/06 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
采购助理岗位职责
2014/02/16 职场文书
个人合伙协议书范本
2014/10/14 职场文书
工程部文员岗位职责
2015/02/04 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python