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


77

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

现在,我要检索选定的文本。(表达式中的value属性仅是data-bindsotre id

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

Answers:


186

从Select2 4.x开始,即使对于非多选择列表,它也始终返回一个数组。

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);
}

注意,当没有选择时,变量“ 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文档

data获取或设置选择。与val方法类似,但适用于对象而不是id。

具有未设置值的单选调用的data方法将返回null,而空的多选调用的data方法将返回[]。


13
请注意,如果$('your-original-element')设置为多选,$('your-original-element').select2('data')则在这种情况下data.text将无法返回数组,而是使用data[index].text
tangobee 2014年

7
对于select2的当前版本(截至今天为v4.0.0),即使是单选,也仅对var data = $('your-original-element').select2('data')[0]我有用。$('your-original-element').select2('data').id // or .text给我了undefined。请参阅此jsfiddle以获取证明。尝试$('your-original-element').select2('data').id // or .text在控制台中登录控制台。
Fr0zenFyr 2015年

如何通过表单提交发送..正常方式?
Hos Mercury

这个答案不好。不适用于select2的4.x +。您需要像@ Fr0zenFyr一样转到数组的第一项。
Nicolas Belley

这项$('your-original-element').select2('data');工作对我来说。谢谢
ankit suthar

15

我终于弄清楚了这样做:

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);

5

用于显示文字

var data = $('#id-selected-input').select2('data'); 
data.forEach(function (item) { 
    alert(item.text); 
})



2

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

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

它没有文件记录,因此将来可能会在没有警告的情况下中断。

您可能想先检查是否有选择:

var s = $('.select2-chosen');

if(s.select2('data') && !!s.select2('data')[0]){
    //do work
}

0

我再次建议简单易用

当用户搜索并选择它时,它可以与ajax完美配合,通过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);
 });

0

使用V 4.0.3可以正常工作

var vv = $('.mySelect2');     
var label = $(vv).children("option[value='"+$(vv).select2("val")+"']").first().html();
console.log(label); 

0

在Select2版本4中,每个选项都具有列表中对象的相同属性。

如果你有对象

Obj = {
  name: "Alberas",
  description: "developer",
  birthDate: "01/01/1990"
}

然后您检索选定的数据

var data = $('#id-selected-input').select2('data');
console.log(data[0].name);
console.log(data[0].description);
console.log(data[0].birthDate);
 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.