jQuery自动完成:事件选择

时间:2011-10-11 22:30:45

标签: jquery jquery-ui autocomplete jquery-ui-autocomplete

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

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

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

这是我用于提交的内容:

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

2 个答案:

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