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

JavaScript获取Select2选中项name和email返回undefined的解决方法

Select2选中项自定义字段(email)获取方案

问题根源

Select2的AJAX数据源返回的自定义字段(如你配置的email)默认存储在组件内部缓存中,不会自动写入DOM的<option>标签,因此无法通过jQuery的.find(':selected').text()这类原生DOM方法拿到非默认的id/text字段。你之前使用的$('.txtTeamAddDelete').select2('val',["name", "email"])属于API误用,val方法仅支持读取/设置选中项的ID值,不支持读取自定义属性,因此会返回undefined。

可直接运行的修复代码

你只需要修改按钮点击事件的逻辑,使用Select2官方提供的select2('data')方法获取选中项的完整数据对象即可,不需要修改现有HTML和Select2初始化配置:

$(document).ready(function(){
    $('.btnrowAddDelete').click(function(){
        // 读取选中项完整数据,单选模式下返回数组的第一个元素
        const selectedItem = $('.txtTeamAddDelete').select2('data')[0];
        
        // 未选择任何项时拦截操作,避免报错
        if (!selectedItem) {
            alert('请先选择对应条目');
            return;
        }

        // 直接从返回的数据对象取需要的字段
        const itemName = selectedItem.text;
        const itemEmail = selectedItem.email;

        // 追加表格行
        $('.TableAddDelete tbody').append(`<tr><td>${itemName}</td><td>${itemEmail}</td></tr>`);
    });
});

原有代码参考

HTML结构

<select class="txtTeamAddDelete form-control" name="itemName"></select>
<button type="button" class="btnrowAddDelete">Add New Row</button>

Select2初始化配置(无需修改,已正确返回email字段)

$('.txtTeamAddDelete').select2({
  placeholder: 'Select an item',
  ajax: {
    url: "{{route('meeting.list-meeting.dataAjax')}}",
    dataType: 'json',
    delay: 250,
    processResults: function (data) {
      return {
        results:  $.map(data, function (item) {
              return {
                  text: item.name,
                  id: item.id,
                  email: item.email
              }
          })
      };
    },
    cache: true
  }
});

实现效果参考

追加行效果示意图


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:06:52