解决使用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 相关文章推荐
FileUpload 控件 禁止手动输入或粘贴的实现代码
Apr 07 Javascript
js关闭父窗口时关闭子窗口
Apr 01 Javascript
js控制frameSet示例
Sep 10 Javascript
基于JavaScript实现网页倒计时自动跳转代码
Dec 28 Javascript
JS组件Bootstrap实现下拉菜单效果代码
Apr 26 Javascript
AngularJS 防止页面闪烁的方法
Mar 09 Javascript
使用 Vue.js 仿百度搜索框的实例代码
May 09 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
May 16 Javascript
Electron vue的使用教程图文详解
Jul 05 Javascript
vue 子组件修改data或调用操作
Aug 07 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
Sep 28 Javascript
详解JavaScript中的链式调用
Nov 27 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中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
jQuery学习3:操作元素属性和特性
2010/02/07 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
详解Python中的join()函数的用法
2015/04/07 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
python如何判断IP地址合法性
2020/04/05 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
Pygame框架实现飞机大战
2020/08/07 Python
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
致接力运动员广播稿
2014/02/17 职场文书
亲子读书活动方案
2014/02/22 职场文书
难忘的一天教学反思
2014/04/30 职场文书
企业总经理任命书
2014/06/05 职场文书
上诉答辩状范文
2015/05/22 职场文书
雷锋电影观后感
2015/06/10 职场文书
分析Python list操作为什么会错误
2021/11/17 Python