jQuery select2控件 - 检索最后选择的元素

时间:2015-05-18 15:23:01

标签: javascript jquery-select2 multipleselection

我正在使用jQuery select2控件,我需要实现以下功能:如果用户尝试添加某个元素,基于某种算法,我应该从选择中删除另一个(不兼容的)元素。我认为有两种方法可以实现这一目标:

1)禁止自动排序所选值 2)获取最后一个选定项的值,并可选择从列表中删除不兼容的项

For 1)我无法想象如何禁止自动排序("数据"和#34;值"在执行选择后排序) 对于2)我无法在任何地方找到最后选择的项目信息(我希望在选择事件 e 变量中找到一些内容。)

我的代码如下:

    $("#PhaseFilterSelectedList").select2()
       .on("select2:select", function (e) {
           // removing option inconsistent with last selected item, if any
           var allData = $("#PhaseFilterSelectedList").select2("val");
           if (!allData || allData.length < 2)
               return;

           //alert("Value = " + $("#PhaseFilterSelectedList").select2("val").join(','));
           //alert("Data = " + $("#PhaseFilterSelectedList").select2("data")[0].id + " " + $("#PhaseFilterSelectedList").select2("data")[1].id);

           var lastItemId = allData.slice(-1)[0];
           var lastItemHalf = Math.floor((parseInt(lastItemId) + 1) / 2);
           var toRemove = jQuery.grep(allData, function (elem, index) {
               return elem != lastItemId && Math.floor((parseInt(elem) + 1) / 2) == lastItemHalf;
           });

           if (!toRemove || toRemove.length < 1)
               return;

           allData.splice($.inArray(toRemove[0], allData), 1);
           $("#PhaseFilterSelectedList").select2("val", allData);

       })

不兼容的元素删除工作正常,但我无法识别用户执行的最后一个选择。

知道如何执行此任务?谢谢。

2 个答案:

答案 0 :(得分:15)

嘿,我可能有点迟到回答这个问题,但我找到了一个非常简单的解决方法。我们通过查看最后一个选定项目的事件是正确的。这对我有用。

var $eventSelect = $('.select_field'); //select your select2 input
$eventSelect.on('select2:unselect', function(e) {
  console.log('unselect');
  console.log(e.params.data.id); //This will give you the id of the unselected attribute
  console.log(e.params.data.text); //This will give you the text of the unselected text
})
$eventSelect.on('select2:select', function(e) {
  console.log('select');
  console.log(e.params.data.id); //This will give you the id of the selected attribute
  console.log(e.params.data.text); //This will give you the text of the selected
})

答案 1 :(得分:0)

对于第二部分,这可能会对您有所帮助:

$(this).val(); // references the select

您可以对其进行过滤以获取所有需要的值。

一个例子在小提琴中:http://jsfiddle.net/jEADR/1588/