jQuery自动完成:事件选择

我正在尝试从菜单中选择项目时提交表单。 我在搜索表单上设置了类,我正在使用它的事件选择,它可以在这里找到: http : //docs.jquery.com/UI/Autocomplete#event-select

现在,当您使用键盘选择项目(向上和向下)时,它可以正常工作。 但是,如果使用鼠标选择项目,它将为您提供以前键入的值。

检查此屏幕: http : //www.screenr.com/7T0s

这是我用于提交的内容:

$("#searchform-input").autocomplete({ select: function (a, b) { $(".searchform1").submit() } }); 

这是因为select事件的默认行为是事件处理程序运行完毕后执行的 (如果您愿意,可以取消它)。

这意味着当您单击某些内容时,您的表单将在窗口小部件有机会正确填充input之前提交。

您应该能够通过执行小部件通常为您执行的操作来解决此问题:

 $("#searchform-input").autocomplete({ select: function (a, b) { $(this).val(b.item.value); $(".searchform1").submit() } }); 

现在,您可能想知道的是肯定的,但为什么我使用键盘时它会起作用?

发生这种情况是因为focus事件实际填充了input的焦点项(仔细观察;当您在列表中上下移动时,您将看到填充的input )。 将鼠标hover在项目上时,将调用focus事件,填充input 。 当您使用enter键选择某些内容时,由于focus事件,正确的值恰好位于input中。

呵呵。 解决这个问题非常棘手,但解决起来非常简单。 在select事件之后,只需将函数延迟500毫秒。 它完美地运作。 任务完成!! 🙂

 $("#searchform-input").autocomplete({ select: function (a, b) { setTimeout(submit,500); }});