在WebKit浏览器中,选择表单的Blur()事件不会触发。

5
我有一个简单的

1
你尝试过将焦点设置在一个不可见的元素上而不是使当前元素失焦吗? - Joseph Marikle
你尝试过添加一个假的<input type="text" />并将焦点聚焦到它上面吗? - Wulf
好主意。我没有想到那样做。我尝试将焦点集中在几个不同的对象上(虚拟对象、页面上的其他选择表单和文档本身),但我从未能够使聚焦的选择表单模糊。 - Jared Sheets
1个回答

2
我不认为这是可能的。似乎当在webkit中激活选择元素时,DOM不会识别除单击之外的任何鼠标事件。因此,问题不是您的blur()方法未触发。问题是mouseleave()方法未触发!请参见此fiddle:http://jsfiddle.net/JpWLb/。打开控制台。当你移动鼠标时,它将不断地得到字符串“ok”。但是一旦你点击选择元素,那些控制台日志将停止。

Maxedison:嗯,有趣。我还没有能够给予它应有的尊重(目前不在我的电脑上,我的项目也在上面)。但我计划明天早上仔细思考并回复一些评论,可能会接受答案。非常感谢 :) - Jared Sheets
Maxedison:我已经在Chrome、IE、Firefox和Safari中查看了那个fiddle。当鼠标位于<option>元素内部时,Chrome和Safari都停止触发'mousemove'事件。IE也表现出这种行为,但Firefox仍然会在<option>元素内部触发mousemove事件。虽然如此,似乎我仍然应该能够检测到父div上的mouseleave并触发子<select>元素上的blur()。我会尝试在稍后提供一个fiddle。 - Jared Sheets
Chrome和Safari都是基于Webkit,这就解释了它们的相似行为。根据我发布的内容,我不确定为什么你会说:“看起来我仍然应该能够检测到mouseleave”。正如我的示例展示的那样,除了单击之外,好像没有任何鼠标事件被DOM注册。但是我很想看到一个解决方案……虽然我自己还没有遇到过这个问题,但也许将来会遇到 :) - maxedison
我正在尝试检测包含<select>表单的父<div>上的mouseleave事件,而不是<select>表单本身。我在原帖末尾放了一个演示链接,展示了我所使用的设置。代码在非Webkit浏览器上运行不完美(鼠标悬停在<option>上也会导致表单缩回),但详细说明了我正在经历的问题。 - Jared Sheets
我理解这一点。但我的意思是,除了点击事件之外,没有任何DOM事件会触发任何东西,包括父级div、活动选择元素等。 - maxedison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接