如何使用<input>从select2中获取选定的文本

我正在使用select2控件,通过ajax 加载数据 。 这需要使用<input type=hidden..>标签。

现在,我想要检索选定的文本。 ( data-bindexpression式中的value属性只有id

我已经尝试了$(".select2-chosen").text() ,但是当我在页面上有多个select2控件时,这个会中断。

从Select2 4.x开始,它总是返回一个数组,即使对于非多重select列表。

 var data = $('your-original-element').select2('data') alert(data[0].text); alert(data[0].id); 

对于Select2 3.x和更低

单选:

 var data = $('your-original-element').select2('data'); if(data) { alert(data.text); } 

请注意,当没有select时,variables'data'将为空。

多选:

 var data = $('your-original-element').select2('data') alert(data[0].text); alert(data[0].id); alert(data[1].text); alert(data[1].id); 

从3.x 文档 :

数据获取或设置select。 与val方法类似,但是使用对象而不是id。

在一个unset值的单选中调用的数据方法将返回null,而在一个空的多选中调用的数据方法将返回[]。

我终于明白了这一点:

 var $your-original-element = $('.your-original-element'); var data = $your-original-element.select2('data')[0]['text']; alert(data); 

如果你还想要的价值:

 var value = $your-original-element.select2('data')[0]['id']; alert(value); 

您也可以使用以下代码来select值:

 alert("Selected option value is: "+$('#SelectelementId').select2("val")); 

我再次build议简单和容易

它的工作完美的Ajax当用户search和select它保存通过ajax选定的信息

  $("#vendor-brands").select2({ ajax: { url:site_url('general/get_brand_ajax_json'), dataType: 'json', delay: 250, data: function (params) { return { q: params.term, // search term page: params.page }; }, processResults: function (data, params) { // parse the results into the format expected by Select2 // since we are using custom formatting functions we do not need to // alter the remote JSON data, except to indicate that infinite // scrolling can be used params.page = params.page || 1; return { results: data, pagination: { more: (params.page * 30) < data.total_count } }; }, cache: true }, escapeMarkup: function (markup) { return markup; }, // let our custom formatter work minimumInputLength: 1, }).on("change", function(e) { var lastValue = $("#vendor-brands option:last-child").val(); var lastText = $("#vendor-brands option:last-child").text(); alert(lastValue+' '+lastText); }); 

下面的代码也可以解决

 .on("change", function(e) { var lastValue = e.currentTarget.value; var lastText = e.currentTarget.textContent; }); 

从v4开始,正确的做法是:

$('.select2-chosen').select2('data')[0].text

这是没有证据的,所以可以在未来没有任何警告地打破。

您可能需要先检查是否有一个select,但是:

 var s = $('.select2-chosen'); if(s.select2('data') && !!s.select2('data')[0]){ //do work }