2011-10-11 114 views
25

我想当从菜单中选择一个项目提交表单。我在搜索表单上设置了课程,并且使用事件选择:http://docs.jquery.com/UI/Autocomplete#event-selectjQuery的自动完成:事件选择

现在,当您使用键盘(UP和DOWN)选择一个项目时,它可以工作。但是,如果您使用鼠标选择一个项目,它将为您提供以前输入的值。

入住此screenr:http://www.screenr.com/7T0s

这是我用提交:

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

回答

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事件。

+2

+1打我吧......试试[这个演示(http://jsfiddle.net/Mottie/SmycH/) – Mottie

+0

难以置信!非常感谢主席 – jQuerybeast

+0

@jQuerybeast:没问题! –

-2

呵呵。这个很复杂,但解决起来非常简单。在选择事件之后,只需延迟函数500毫秒。它完美的作品。任务完成!! :)

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

当有真正的解决方案时,不要依赖时间。 –