Blur()事件未在webkit浏览器中针对选择表单触发

我有一个简单的元素,其中包含多个元素:

  select dollar amount $5 $10 $15 $20  

只有当用户将鼠标hover在页面上的另一个元素上时,才会显示此表单:

 $("#parentDiv").mouseenter(function(){ $("#selectFormDiv").show(); //dollarAmount contained in this div }); 

parentDiv上触发mouseleave事件parentDiv ,我确保表单模糊,以便选项不会保持展开状态。 一旦模糊,我可以安全地隐藏包含

以便表单及其容器正确隐藏。

 $("#parentDiv").mouseleave(function(){ $("#dollarAmount").blur(); $("#selectFormDiv").hide(); }); 

我的问题是:这适用于IE8和Firefox 5.1,但不适用于Chrome 12.0或Safari 5.1。 我已经检测到浏览器是否是webkit并使用不同的命令进行测试,而且看起来blur()似乎不会导致表单崩溃(正确的术语?试图隐藏掉落的选项)。 如果在离开parentDiv展开它们,则上述代码不会隐藏选项。 触发表单上的hide()事件会隐藏Chrome中的选项(在Opera中仍然没有运气),但当然也会导致整个表单隐藏:

 $("#parentDiv").mouseleave(function(){ if($.browser.webkit) { $("#dollarAmount").hide(); $("#selectFormDiv").hide(); } else { $("#dollarAmount").blur(); //blur only triggers for non webkits? $("#selectFormDiv").hide(); } }); 

我已经尝试了其他一些事件/方法,包括在mouseleave上触发document.mouseup来触发blur() 。 我试图使用focusoutchangeclick事件来折叠选择表单,但没有成功。

有没有办法通过事件调用在webkit浏览器中隐藏表单的

编辑:为清楚起见,实际的blur()事件似乎确实在触发。 我有一个dollarAmount表单正在监听onblur只是为了打印到控制台。 控制台打印确实执行,但是当调用blur()时,表单不会像在非webkit浏览器中那样折叠。

这里有一个解释问题的小提琴: http : //jsfiddle.net/JpWLb/4/在非webkit浏览器上:单击元素,但是一旦它们推出就不要hover在任何 。 随着选项仍然扩展,鼠标移出包含div。 在firefox和IE中,生成的$("#mySelect").blur()调用会导致选项缩进(yay!)。 但是,在webkit浏览器上,模糊扩展的元素似乎什么都不做:选项仍然扩展。 我希望的结果是所有浏览器都可以在嵌入包含div时隐藏扩展选项。

我不认为这是可能的。 看来,当在webkit中激活select元素时,DOM不会识别除点击之外的任何鼠标事件。 所以问题不在于你的blur()方法没有触发。 问题是mouseleave()方法没有触发!

看到这个小提琴: http : //jsfiddle.net/JpWLb/

打开你的控制台。 当你移动鼠标时,它会不断地输入字符串“ok”。 但是只要单击select元素,这些控制台日志就会停止。