可能在进行选择后触发select2-focus 事件。
我发现的唯一方法是 select2-focus 和 select2-blur 事件和 jQuery one 事件处理程序的组合。
所以元素第一次获得焦点时,select2打开一次(因为一次),当元素模糊时再次附加一个事件处理程序,依此类推。
代码:
$('#test').select2({
data: [{
id: 0,
text: "enhancement"
}, {
id: 1,
text: "bug"
}, {
id: 2,
text: "duplicate"
}, {
id: 3,
text: "invalid"
}, {
id: 4,
text: "wontfix"
}],
width: "300px"
}).one('select2-focus', select2Focus).on("select2-blur", function () {
$(this).one('select2-focus', select2Focus)
})
function select2Focus() {
$(this).select2('open');
}
演示:http://jsfiddle.net/IrvinDominin/fnjNb/
更新
要让鼠标单击起作用,您必须检查触发处理程序的事件,只有当事件是focus 时,它才必须触发open 方法
代码:
function select2Focus() {
if (/^focus/.test(event.type)) {
$(this).select2('open');
}
}
演示:http://jsfiddle.net/IrvinDominin/fnjNb/4/
SELECT2 V 4.0 更新
select2 v 4.0 已更改其 API 并删除了自定义事件(请参阅 https://github.com/select2/select2/issues/1908)。所以有必要改变检测焦点的方式。
代码:
$('.js-select').select2({
placeholder: "Select",
width: "100%"
})
$('.js-select').next('.select2').find('.select2-selection').one('focus', select2Focus).on('blur', function () {
$(this).one('focus', select2Focus)
})
function select2Focus() {
$(this).closest('.select2').prev('select').select2('open');
}
演示:http://jsfiddle.net/IrvinDominin/xfmgte70/