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