解决使用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中调用WebService方法小结
Mar 28 Javascript
常见表单重复提交问题整理及解决方法
Nov 13 Javascript
使用AOP改善javascript代码
May 01 Javascript
js实现简单div拖拽功能实例
May 12 Javascript
JavaScript操作Cookie方法实例分析
May 27 Javascript
浅谈使用MVC模式进行JavaScript程序开发
Nov 10 Javascript
jquery判断复选框选中状态以及区分attr和prop
Dec 18 Javascript
Bootstrap每天必学之轮播(Carousel)插件
Apr 25 Javascript
微信小程序开发实战教程之手势解锁
Nov 18 Javascript
深入浅析Node环境和浏览器的区别
Aug 14 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
Aug 24 Javascript
vue数据操作之点击事件实现num加减功能示例
Jan 19 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
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
php获取参数的几种方法总结
2014/02/18 PHP
php遍历文件夹下的所有文件和子文件夹示例
2014/03/20 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
php实现使用正则将文本中的网址转换成链接标签
2014/12/03 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
from 表单提交返回值用post或者是get方法实现
2013/08/21 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
Node 代理访问的实现
2019/09/19 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
python获取图片颜色信息的方法
2015/03/18 Python
python绘制多个曲线的折线图
2020/03/23 Python
Django 重写用户模型的实现
2019/07/29 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
资料员的岗位职责
2013/11/20 职场文书
法警的竞聘演讲稿
2014/01/02 职场文书
小学教师自我鉴定范文
2014/03/20 职场文书
有关九一八事变的演讲稿
2014/09/14 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
颐和园导游词
2015/01/30 职场文书
CSS基础详解
2021/10/16 HTML / CSS
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python