我正在尝试从菜单中选择项目时提交表单。我在搜索表单上设置了类,我在这里使用了事件select for http://docs.jquery.com/UI/Autocomplete#event-select
现在,当您使用键盘选择项目(向上和向下)时,它可以正常工作。但是如果您使用鼠标选择一个项目,它会为您提供以前键入的值。
检查此截屏:http://www.screenr.com/7T0s
这是我用于提交的内容:
$("#searchform-input").autocomplete({
select: function (a, b) {
$(".searchform1").submit()
}
});
答案 0 :(得分:63)
这是因为select
事件的默认行为已执行after your event handler is finished running(因此,如果您愿意,可以取消它)。
这意味着当您点击某些内容时,您的表单会在窗口小部件有可能正确填充input
之前提交。
您应该可以通过执行小部件通常为您执行的操作来解决此问题:
$("#searchform-input").autocomplete({
select: function (a, b) {
$(this).val(b.item.value);
$(".searchform1").submit()
}
});
现在,您可能想知道的是是的,但为什么在我使用键盘时它会起作用?
这是因为focus
事件实际填充了input
中的焦点项目(仔细观察;当您在列表中上下移动时,您会看到填充input
)。将鼠标悬停在某个项目上时,会调用focus
事件,填充input
。当您使用enter
键选择内容时,由于input
事件,正确的值恰好位于focus
。
答案 1 :(得分:-2)
鹤鹤。非常棘手的这个,但解决起来非常简单。在select事件之后,只需将函数延迟500毫秒。它完美地运作。任务完成!! :)
$("#searchform-input").autocomplete({
select: function (a, b) {
setTimeout(submit,500);
}});