9

我将 Select2 与 ajax 一起使用。一切正常,当用户单击他们想要的项目时,我使用文档指定的 on(change) 函数来做一些事情。

  $("#e6").on("change", function(e) {          
        $('input#Destination').val(e.val); 
          });

});

返回值(e.val)是来自 ajax 调用的data.id值,但我的数据对象有“ name ”、“ id ”和“ type ”。

我可以向 dataFormatSelection() 添加代码,但这听起来不合逻辑并且令人困惑。

     function dataFormatSelection(data) {
    console.log(data.name + "|" data.id + "|" + data.type);
     return data.name;
 }

如何在 on("change".. 事件中访问整个数据对象(而不仅仅是data.id )?

4

3 回答 3

21
$("#e6").on('change', function(e) {
    // Access to full data
    console.log($(this).select2('data'));
});
于 2013-04-14T07:33:14.123 回答
2

根据Select2 文档,更改事件应具有 3 个属性:事件对象包含以下自定义属性:

  • val:当前选择(考虑到更改的结果)- id 或 ids 数组
  • added:添加的元素,如果有的话 - 完整的元素对象,而不仅仅是 id
  • 移除:移除的元素,如果有的话 - 完整的元素对象,而不仅仅是 id

甚至还有例子:

$("#e11").select2({
    placeholder: "Select value ...",
    allowClear: true,
    data: [{id: 0, text: 'story'},{id: 1, text: 'bug'},{id: 2, text: 'task'}]
});

$("#e11_2").select2({
    placeholder: "Select value ...",
    multiple: true,
    data: [{id: 0, text: 'story'},{id: 1, text: 'bug'},{id: 2, text: 'task'}]
});

$("#e11").on("change", function(e) { 
    console.log(JSON.stringify({val:e.val, added:e.added, removed:e.removed})); 
}).on("open", function() { 
    console.log("open"); 
});

$("#e11_2").on("change", function(e) { 
    console.log(JSON.stringify({val:e.val, added:e.added, removed:e.removed})); 
}).on("open", function() { 
    console.log("open"); 
});

但我注意到只有在打开时才会出现addedremoved属性multiple: true。我不知道这是设计使然还是错误。无论如何,我都会报告它,因为绝对需要在更改时使用选定的元素。

于 2013-04-01T21:56:14.387 回答
0

我有疑问...如何获取控制台日志中显示的值并使用它?

如果我采用这些值并将每个值放入一个var中是正确的吗?因为如果我对创建的任何 var 使用 console.log(var) ,则会显示该值,但如果执行 alert(var) 则永远不会显示警报。

我需要使用 AJAX 调用 PHP 函数所选择的选项的值。

$("#e11").on('change', function(e) {
   //I create a var data and works it like an Array
   var data = $(this).select2('data');
   //Then I take the values like if I work with an array
   var value = data.id;
   var text = data.text;
   //If I use console.log(var) the values are displayed but not with an alert
}

谢谢!!!

于 2014-02-27T04:47:42.260 回答