解决使用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 相关文章推荐
网页javascript精华代码集
Jan 24 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
Jan 24 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
Nov 02 Javascript
jQuery的ready方法详解
Nov 27 Javascript
jQuery实现文字自动横移
Jan 08 Javascript
angular中实现li或者某个元素点击变色的两种方法
Jul 27 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
Jul 13 Javascript
详解微信小程序之scroll-view的flex布局问题
Jan 16 Javascript
ES6 Generator函数的应用实例分析
Jun 26 Javascript
微信小程序嵌入腾讯视频源过程详解
Aug 08 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
May 19 Javascript
JavaScript实现多球运动效果
Sep 07 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
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
菜单效果
2006/10/14 Javascript
匹配任意字符的正则表达式写法
2010/04/29 Javascript
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
javascript验证手机号和实现星号(*)代替实例
2016/08/16 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
vue axios用法教程详解
2017/07/23 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
详解Python实现多进程异步事件驱动引擎
2017/08/25 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
explicit和implicit的含义
2012/11/15 面试题
团日活动总结
2014/04/28 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
四风问题对照检查材料
2014/09/22 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
千与千寻观后感
2015/06/04 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
详解vue中v-for的key唯一性
2021/05/15 Vue.js