【问题标题】:HTML Select Element: leaving option triggers Select mouseout Event in SafariHTML Select Element:离开选项触发 Safari 中的 Select mouseout 事件
【发布时间】:2019-02-24 09:46:18
【问题描述】:

我已将我正在开发的一些代码的问题缩小到以下范围:

如果我将mouseout 事件侦听器分配给HTML select 元素,每当我将鼠标从一个option 元素移动到另一个时,它似乎就会被触发;不仅仅是将鼠标移到select之外。

我已经在我的 Mac 上对此进行了测试。它发生在 Safari 上,但不在 Firefox 或 Chrome 上,这表明它不是预期的行为。

我尝试过使用捕获阶段并以两种方式阻止事件继续进行,但 Safari 似乎真的相信留下option 也会留下select。我也尝试过使用mouseleave 事件,但我遇到了同样的问题。

我怎样才能阻止这种情况发生?

样本

var list=document.querySelector('div#list>select');
list.addEventListener('mouseleave',exit,true);
function exit(event) {
	event.stopPropagation();
	if(event.target!==this) return;
	console.log(`${this} ${event.eventPhase} ${event.target}\n`);
}
<div id="list">
	<select name="list" size="9">
		<option>Eight</option>
		<option>Five</option>
		<option>Four</option>
		<option>Nine</option>
		<option>One</option>
		<option>Seven</option>
		<option>Six</option>
		<option>Three</option>
		<option>Two</option>
	</select>
</div>

【问题讨论】:

标签: javascript events safari html-select mouseout


【解决方案1】:

在尝试了各种可能性之后,我发现你可以使用document.elementsFromPoint来检查鼠标是否在select元素内。

添加这一行有帮助:

if (document.elementsFromPoint(event.clientX,event.clientY).includes(list)) return;

var list=document.querySelector('div#list>select');
list.addEventListener('mouseleave',exit,true);
function exit(event) {
//	Check the mouse is inside select element
if (document.elementsFromPoint(event.clientX,event.clientY).includes(list)) return;
event.stopPropagation();
if(event.target!==this) return;
console.log(`${this} ${event.eventPhase} ${event.target}\n`);
}
<div id="list">
	<select name="list" size="9">
		<option>Eight</option>
		<option>Five</option>
		<option>Four</option>
		<option>Nine</option>
		<option>One</option>
		<option>Seven</option>
		<option>Six</option>
		<option>Three</option>
		<option>Two</option>
	</select>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-20
    • 2017-05-30
    • 2020-01-25
    • 2011-06-24
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2011-04-22
    相关资源
    最近更新 更多