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()
。 我试图使用focusout
, change
和click
事件来折叠选择表单,但没有成功。
有没有办法通过事件调用在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元素,这些控制台日志就会停止。