隐藏后,jQuery自动完成焦点再一次聚焦

时间:2012-02-08 21:42:59

标签: javascript jquery

有人知道为什么在搜索字段外单击并隐藏自动完成结果后,焦点会再激活一次吗?请见http://layot.prestatrend.com/ 例如在搜索字段'ipo'中键入3个字母。谢谢你的回复!

2 个答案:

答案 0 :(得分:1)

我想如果建议菜单可见,这只是插件重新聚焦输入的行为。

当您点击外部(或使用TAB取消对焦)输入时,会触发“模糊”事件:

.blur(function() {
    hasFocus = 0;
    if (!config.mouseDownOnSelect) {
        hideResults();
    }
})

执行进行此检查的hideResults' executes another function hideResultsNow`:

var wasVisible = select.visible();
...
if (wasVisible)
    // position cursor at end of input field
    $.Autocompleter.Selection(input, input.value.length, input.value.length);

wasVisible为真,因为建议菜单已打开。

$.Autocompleter.Selection的工作是在输入中设置文本选择,最后,它集中输入:

$.Autocompleter.Selection = function(field, start, end) {
    if (field.createTextRange) {
        ...
    } else if (field.setSelectionRange) {
        ...
    } else {
        ...
    }
    field.focus();
};

如果再次在输入外单击,则变量wasVisible为false,因为建议菜单不再打开,并且$.Autocompleter.Selection未执行,因此输入不会重新聚焦。< / p>

答案 1 :(得分:0)

我找到的唯一方法:销毁焦点事件的自动完成以重新初始化它。

function defaultFocusAction(e, options) {
  if($(e.currentTarget).val() == '') {
    $(e.currentTarget).autocomplete('destroy');
    $(e.currentTarget).autocomplete(options);
  }
  $(e.currentTarget).trigger('keydown.autocomplete');
}
var options = {
  autoFocus : false,
  delay : 0,
  minLength: 0,
  source: ['foo', 'bar']
};
$('input.autocomplete').autocomplete(options).focus(function(e) {
  defaultFocusAction(e, options);
});