解决使用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 相关文章推荐
漂亮的提示信息(带箭头)
Mar 21 Javascript
让textarea控件的滚动条怎是位与最下方
Apr 20 Javascript
js CSS操作方法集合
Oct 31 Javascript
toString()一个会自动调用的方法
Feb 08 Javascript
AngularJS入门教程(二):AngularJS模板
Dec 06 Javascript
jQuery插件 Jqplot图表实例
Jun 18 Javascript
Bootstrap表格使用方法详解
Feb 17 Javascript
JS实现带导航城市列表以及输入搜索功能
Jan 04 Javascript
webpack4 升级迁移的实现
Sep 12 Javascript
详解小程序云开发攻略(解决最棘手的问题)
Sep 30 Javascript
jQuery操作元素追加内容示例
Jan 10 jQuery
JS前端使用Canvas快速实现手势解锁特效
Sep 23 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源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
浅析Yii2 GridView实现下拉搜索教程
2016/04/22 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
Python 随机生成中文验证码的实例代码
2013/03/20 Python
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
乡下人家教学反思
2014/02/01 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
Java基于字符界面的简易收银台
2021/06/26 Java/Android