6 回答
受到@FritsvanCampen 绝对有效的评论的启发,我坐下来自己想出了一个方法:我真正需要的是一种访问当前选择的方法val
,即使它没有改变。通过使用 select2 的未记录close
-event 而不是change
,我可以像这样访问:
function onSelectChange(event){
alert( $("#select").select2("val") );
};
$("#select").select2().bind('close', onSelectChange);
在http://jsfiddle.net/rb6pH/42/上查找更新的 jsFiddle
此处提出了类似的问题。我根据链接中的代码为您的问题做了一个小提琴。 http://jsfiddle.net/rb6pH/55/
function onSelectChange(){
alert('changed');
};
var select2 = $("#select").select2().data('select2');
select2.onSelect = (function(fn) {
return function(data, options) {
var target;
if (options != null) {
target = $(options.target);
}
if (target) {
onSelectChange();
return fn.apply(this, arguments);
}
}
})(select2.onSelect);
我想你可能会参考这个链接,我曾经遇到过同样的情况,
val()
使用 Select2 的方法更改选择时不会触发更改事件。
事件对象包含以下自定义属性:
值
当前选择(考虑到更改的结果) - id 或 id 数组。
添加
添加的元素,如果有的话 - 完整的元素对象,而不仅仅是 id
移除
移除的元素,如果有的话 - 完整的元素对象,而不仅仅是 id
有关更多信息,您可以参考此。
谢谢!
我阅读了这个问题,它与我的问题非常接近,所以我决定不发布另一个问题。我想要做的是在 select2 关闭后,一个简单的文本输入成为焦点,但它不起作用。请检查
function onSelectChange(){
alert('closed');
$('#hey').focus();
};
$("#select").select2().bind('close', onSelectChange);
$('#hey').on('focusin)', function(){alert('in');}
http://jsfiddle.net/sobhanattar/x49F2/5/
我试图确保输入变得聚焦并且它表明输入变得聚焦但我不知道为什么它不显示光标
一个有点老的问题,但我上周花了几个小时寻找解决方案。
我正在使用 Select2 版本:4.0.5。
我的工作解决方案是这个:
$("#exampleId").on("select2:open", function() {
var checkExist = setInterval(function() {
var $selectedChoiceInsideSelect2Dropdown = $("li.select2-results__option[id^='select2-" + exampleId + "-result'][aria-selected=true]");
if ($selectedChoiceInsideSelect2Dropdown.length) {
$selectedChoiceInsideSelect2Dropdown.on("mouseup", function() {
$(this).trigger("change");
});
clearInterval(checkExist);
}
}, 100); // check every 100ms
});
使用间隔很重要!
var prev_val = $('#select2').val();
$('#select2').blur( function() {
if( $(this).val() == prev_val )
// not changed
else {
// changed
prev_val = $(this).val();
}
});