jQuery select2 控件 - 检索最后选择的元素
jQuery select2 control - retrieve last selected element
我正在使用 jQuery select2 控件,我需要实现以下功能:如果用户尝试添加某个元素,基于某种算法,我应该删除另一个(不兼容) 来自 selection 的元素。我看到有两种方法可以实现:
1) 禁止自动排序 selected 值
2) 获取最后一个 selected 项目的值,并可选择从列表中删除不兼容的项目
对于 1) 我不知道如何禁止自动排序("data" 和 "values" 都是在执行 selection 之后排序的)
对于 2) 我无法在任何地方找到最后 selected 项目信息(我希望在 select 事件 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);
})
不兼容的元素删除工作正常,但我无法识别用户执行的最后一个 select离子。
知道如何执行此任务吗?谢谢。
对于第二部分,这可能对您有所帮助:
$(this).val(); // references the select
您可以过滤它以获得所有需要的值。
示例在 fiddle 中:http://jsfiddle.net/jEADR/1588/
嘿,我回答这个问题可能有点晚,但我找到了一个非常简单的解决方案。通过查看最后选择的项目的事件,我们是对的。这对我有用。
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
})
我正在使用 jQuery select2 控件,我需要实现以下功能:如果用户尝试添加某个元素,基于某种算法,我应该删除另一个(不兼容) 来自 selection 的元素。我看到有两种方法可以实现:
1) 禁止自动排序 selected 值 2) 获取最后一个 selected 项目的值,并可选择从列表中删除不兼容的项目
对于 1) 我不知道如何禁止自动排序("data" 和 "values" 都是在执行 selection 之后排序的) 对于 2) 我无法在任何地方找到最后 selected 项目信息(我希望在 select 事件 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);
})
不兼容的元素删除工作正常,但我无法识别用户执行的最后一个 select离子。
知道如何执行此任务吗?谢谢。
对于第二部分,这可能对您有所帮助:
$(this).val(); // references the select
您可以过滤它以获得所有需要的值。
示例在 fiddle 中:http://jsfiddle.net/jEADR/1588/
嘿,我回答这个问题可能有点晚,但我找到了一个非常简单的解决方案。通过查看最后选择的项目的事件,我们是对的。这对我有用。
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
})