Javascript mouseleave/focusout事件处理程序和用户从自动完成列表中选择的问题

Javascript mouseleave/focusout事件处理程序和用户从自动完成列表中选择的问题,javascript,jquery,autocomplete,settimeout,jquery-events,Javascript,Jquery,Autocomplete,Settimeout,Jquery Events,我已将jQuery事件处理程序mouseover绑定到具有以下代码的元素: jQuery(document).ready(function(){ jQuery('#buyout_field').mouseleave(function() { alert('Hi!'); }); }); 这非常有效,但我注意到,如果用户从下拉菜单中选择一个值,浏览器会显示您过去输入的数据,mouseleave事件触发得太早,我不喜欢。是的,它在正确的时间触发(当

我已将jQuery事件处理程序
mouseover
绑定到具有以下代码的元素:

jQuery(document).ready(function(){
    
    jQuery('#buyout_field').mouseleave(function() {
        alert('Hi!');
    });    

});
这非常有效,但我注意到,如果用户从下拉菜单中选择一个值,浏览器会显示您过去输入的数据,
mouseleave
事件触发得太早,我不喜欢。是的,它在正确的时间触发(当鼠标离开元素时);但是,我只需要在用户在字段中输入数据后启动该功能

然后,我添加了
focusout
处理程序,以覆盖更多的基础:

jQuery('#buyout_field').focusout(function() {
    alert('Hi!');
});
但是,用户仍然可以从下拉列表中选择一个值,而不在文本字段外单击

在启动函数时,我是否有其他选择,或者我是否必须使用
setTimeout()
来允许用户有时间从自动完成列表中选择一些内容,然后启动函数,或者我是否应该禁用自动完成


Fiddle:

这些下拉列表是什么样子的?如果只是常规的选择元素,那么您就完全错了,应该使用
change
事件!你能发一把小提琴吗?@adeneo不,不是选择元素;自动完成的。比如说,你正在将电子邮件输入电子邮件地址字段,一旦你在其中单击鼠标,它通常会显示以前输入的电子邮件地址的下拉列表,这样你就不必再次键入。你也可以使用更改事件,由于任何操作都会模糊输入,并在值更改时触发更改事件,因此您不能使用鼠标事件来执行该操作。@DevlshOne发布了一条消息。