Layui 使用Form表单的select时无法使用change事件

Posted 酸辣柠檬粉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Layui 使用Form表单的select时无法使用change事件相关的知识,希望对你有一定的参考价值。

                  <div class="layui-inline">

                    <label for="gname" class="layui-form-label" style="width:100px">游戏名称:</label>

                    <div class="layui-input-inline">

                      <select name="gname" lay-filter="gname">

                        <option value="all">请选择</option>

                      </select>

                    </div>

                  </div>

如上select要想实现点击下拉框(而不是点option触发事件)就触发change事件,去后台获取数据更新option,使用jquery的change()事件,无法触发

$('#gname').change(function()

        console.log(111);

)

以上代码不会触发

因为layui美化select是使用input框来做的select,通过js来生成的select,所以会找不到select项,需要用到事件处理

思路如下(原文见如下链接:https://fly.layui.com/jie/30928/ 的评论处)

html
<select name="test"></select>
js部分
// 先用事件委托监听layui生成出来的select组件的点击监听
$(document).on('click', 'select[name="test"]+', function()
    // 被点击的
    var elem = $(this);
    // 原始的select节点
    var selectElem = elem.prev();
    if (!selectElem.data('status') 
        // status是自定义的一个状态,比如一开始是空的,说明需要加载,如果加载过了就设置成true避免重复加载。
        // 发ajax之前最好能有一个提示信息说正在加载
        $.ajax(
            ....,
            success: function(res)
                // 修改selectElem的状态为已完成,避免重复加载
                selectElem.data('status', true);
                // 根据数据得出option的html
                selectElem.html(optionHtml);
                // 更新渲染
                form.render('select');
                // 更新的时候我记得会把打开option给关掉,所以我估计需要在后面再次触发一次点击让它显示出option
                elem.find('.layui-select-title').click();
            
        );
    
)

实际代码: 

var flag =0;

 $(document).on('click', "select[name='gname']+", function () 

    var nums = new Array();

    $("input[type='checkbox']:checked").each(function () 

      nums.push($(this).val());

    )

 

    var data = 

      'nums': nums

    ;

    var elem = $(this).prev();//得到原始select节点

    if (nums.length > 0) 

      elem.empty();

      if(flag=0)

      $.post('findGname', data, function (res) 

        var options = '<option value="">请选择</option>';

        for (i = 0; i < res.data.length; i++) 

          options += "<option value='" + res.data[i] + "'>" + res.data[i] + "</option>";

        

        console.log(options);

        elem.append(options);

        form.render('select');

       flag=1;

      )

    

  )

 

 

不过不太明白:代码中on事件(select[name='gname']+)为什么一定要加个+号才生效?

以上是关于Layui 使用Form表单的select时无法使用change事件的主要内容,如果未能解决你的问题,请参考以下文章

LayUi表单模块无法正常显示

layui的form.val无法动态渲染赋值表单问题解决方法

Layui的select不显示,会是啥原因

layui select怎么赋值

layui渲染form表单

layui的from表单提交到后台