You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ajax Select Picker自动生成的外部列表无法操作求助

解决Ajax Select Picker生成的下拉列表
  • 添加title属性问题
  • 核心思路

    Ajax Select Picker基于bootstrap-select实现,会将原生<select>的<option>转换为可视化的<li>列表,原生option的title属性不会自动同步到生成的<li>,需要通过插件事件钩子或DOM同步操作来实现。

    具体实现步骤

    1. 给原生Option注入title数据

    先确保所有option(包括初始渲染和AJAX加载的)都携带title信息:

    • 初始渲染的option:修改循环生成代码,添加title属性
    // 初始渲染option的循环里,给option加上title
    for (var i = 0; i < itens.length; i++) {
        var title = itens[i].nome; // 可替换为你需要显示的title文本
        if (valorSelecionadoFiltro && valorSelecionadoFiltro == itens[i].nome) {
            textToInsert[idx++] = '<option selected data-valorId="' + itens[i].valorId + '" value="' + itens[i].id + '" title="' + title + '">' + itens[i].nome + '</option>';
        } else {
            textToInsert[idx++] = '<option data-valorId="' + itens[i].valorId + '" value="' + itens[i].id + '" title="' + title + '">' + itens[i].nome + '</option>';
        }
    }
    
    • AJAX加载的数据:在preprocessData中给每个选项的data字段添加title
    preprocessData: function (data) {
        var array = [];
        if (data != null && data.length > 0) {
            for (var i = 0; i < data.length; i++) {
                try {
                    array.push($.extend(true, data[i], {
                        text: data[i].nome,
                        value: data[i].id,
                        data: {
                            valorId: data[i].valorId,
                            title: data[i].nome // 注入title数据
                        }
                    }));
                } catch (e) {
                    console.log(e.message);
                }
            }
        }
        return array;
    }
    

    2. 利用插件事件同步title到
  • bootstrap-select在渲染完成下拉列表后会触发loaded.bs.select事件,此时可以遍历生成的<li>并设置title:

    // 监听下拉列表渲染完成事件
    slValorFiltro.on('loaded.bs.select', function() {
        var $select = $(this);
        // 获取插件生成的下拉容器里的所有li
        $select.next('.bootstrap-select').find('.dropdown-menu li').each(function(index) {
            // 对应原生select的option
            var $option = $select.find('option').eq(index);
            // 给li设置title,优先取option的title属性,其次取data-title
            var title = $option.attr('title') || $option.data('title');
            if (title) {
                $(this).attr('title', title);
            }
        });
    });
    

    3. 处理AJAX动态加载后的同步

    因为AJAX Select Picker会动态加载新数据,需要在AJAX请求完成后重新同步title:

    // 监听AJAX加载完成事件
    slValorFiltro.on('ajaxComplete.ajaxSelectPicker', function() {
        // 重新触发loaded事件,执行同步逻辑
        $(this).trigger('loaded.bs.select');
    });
    

    4. 自定义模板(可选)

    如果插件支持自定义模板,可以直接在配置中定义<li>的模板,自动带入title:

    ajaxSelectPicker({
        // 其他配置...
        templates: {
            // 自定义下拉项模板,直接加入title属性
            dropdownItem: '<li><a tabindex="0" class="dropdown-item" data-id="{{value}}" title="{{data.title}}">{{text}}</a></li>'
        },
        // 其他配置...
    });
    

    内容的提问来源于stack exchange,提问作者ryan reis

    相关产品推荐
    方舟 Agent Plan

    超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

    最近更新时间:2026.07.06 10:32:03