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); }});