在Select2关闭事件触发后,聚焦输入框

3
我阅读了always trigger "change"-event for <select>, even if the select2-option clicked is already selected,由于该问题与我的问题非常相似,因此我在那里发布了我的问题,但没有得到答案。我的问题是,我有一个由Select2构建的下拉框和一个文本输入框。我想要实现的是,在Select2关闭后(无论值是否更改),我的文本输入框会获得焦点。
因此,我按照逻辑做了一些正确的事情,如下所示:
$('#select').select2({placeholder: 'City'});
$('#select')
.on('select2-close', function (e) {
   $('#hey').focus();
});

http://jsfiddle.net/sobhanattar/x49F2/8/

您可以看到,文本输入框无法接受焦点。在查阅Select2文档并检查文档中的事件部分后,我意识到在关闭事件之后,将自动触发焦点事件。这意味着,在关闭Select2选择框之后,它会自动聚焦。因此,我将我的代码更改为以下内容:

$('#select').select2({placeholder: 'City'});
$('#select')
.on('select2-close', function (e) {
       $('#select').blur();
})
.on('select2-blur', function(e) {
      $('#hey').focus();
});

现在它可以正常工作。现在我想知道我的理解从Select2事件顺序是正确的还是我错过了什么。

3个回答

6

请看这里,这个问题已经有答案了:在关闭后模糊select2输入

.on("select2-close", function () {
    setTimeout(function() {
        $('.select2-container-active').removeClass('select2-container-active');
        $(':focus').blur();
        $("#elementid").focus();
    }, 1);
});

elementid是在select2关闭后你想要聚焦的元素的id。 我只是在链接中的答案中添加了$("#elementid").focus();


在较新的Select2版本中,事件名称现在是select2:close(冒号而不是破折号)。 - mbursill

5

试试这个,因为它可以正常工作:

$('#select2').on('select2:close', function (e)
{
   // your focus code for element
});

0
使用CSS:
html, body {
    height:100%
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接