【发布时间】:2012-04-06 05:32:54
【问题描述】:
JS/JQuery:
$this.find('input').autocomplete({
source: "/autocomplete_tc_testcasename",
minLength: 2,
focus: function(e,ui){
$(this).val(ui.item.label);
return false;
},
select: function(e, ui) {
console.log("Selected: "+ui.item.value);
}
});
CSS:
.ui-autocomplete {
max-height: 200px;
overflow-y: auto;
padding: 5px;
}
.ui-menu {
list-style: none;
background-color: #FFFFEE;
width: 50%;
padding: 0px;
border-bottom: 1px solid #DDDDDD;
border-radius: 6px;
-webkit-box-shadow: 0 8px 6px -6px black;
-moz-box-shadow: 0 0px 0px -0px black;
box-shadow: 0px 2px 2px 0px #999999;
}
.ui-menu .ui-menu {
}
.ui-menu .ui-menu-item {
color: #990000;
font-family:"Verdana";
font-size: 12px;
border-top: 3px solid #DDDDDD;
background-color: #FFFFFF;
padding: 10px;
}
问题总结:
- AJAX 工作正常,我在自动完成菜单中正确输入了所有条目。
- 我可以使用向上/向下键箭头来选择菜单项,一旦我按下回车键,选择事件就会正确触发并显示控制台消息。
- 我可以成功地关注 ui-menu-items 并捕获鼠标悬停事件以更改输入文本的值。
- 我似乎无法单击菜单项并触发选择事件。即,当我单击菜单项时,永远不会显示控制台消息。
- 就好像单击事件正在解除菜单并关闭它,而不是实际触发选择事件。关于如何解决这个问题的任何想法?
- 我尝试使用“appendTo : $this”代替输入的父 div,然后鼠标单击就可以正常工作了! - 选择事件被触发并成功显示控制台消息。但这不是我想要的,因为菜单附加在父 div 中,这会扭曲 UI,因为它们可能共享相同的 z-index。即使在这种情况下我将 z-index 更改为一个高数,它也没有多大帮助。因此,我正在寻找一种解决方案,如果可能的话,我不必“必须”使用 appendTo。
我发现了很多其他问题,但似乎没有一个能解决我的问题。
jQuery Autocomplete - Left Mouse Click not firing Select event
jQuery UI autocomplete select event not working with mouse click
谢谢!
【问题讨论】:
-
这将很难重新创建和解决,除非您可以在jsfiddle.net 上创建问题示例或发布指向外部站点的链接....
-
感谢您的提示。在解决问题的过程中,我发现在自动完成菜单上单击鼠标选择之前调用了“模糊”事件。一旦我更改了围绕此的逻辑以按特定顺序处理这两个事件,现在可以通过鼠标单击进行选择。
-
@txciggy:你能准确描述一下你是如何“改变逻辑以按特定顺序处理这两个事件”的吗?我遇到了这个问题,我对 JS 事件处理的了解还不足以让我自己解决这个问题。谢谢
-
@LukeGriffiths:我添加了一个全局标志 'autocomplete=false' 来模糊和自动完成。当我输入我的自动完成输入字段的模糊处理功能时,我有一个 if(!autocomplete) {//do blur stuff here}。在自动完成“焦点”中,我设置了 autocomplete=true;在自动完成“关闭”中,我设置 autocomplete=false 并在我的自动完成字段上显式调用 blur()。
标签: jquery select autocomplete click mouse