代码之家  ›  专栏  ›  技术社区  ›  Manngo

HTML Select元素:在Safari中留下选项触发器Select mouseout事件

  •  0
  • Manngo  · 技术社区  · 6 年前

    我已经将我开发的一些代码的问题缩小到以下几个方面:

    mouseout HTML的事件侦听器 select 元素,每当我将鼠标从一个 option 元素;而不仅仅是将鼠标移到 .

    我已经在我的Mac上测试过了。这种情况发生在Safari上,但在Firefox或Chrome上却没有发生,这表明这并不是预期的结果。

    选项 也会离开 选择 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>
    1 回复  |  直到 6 年前
        1
  •  0
  •   Manngo    6 年前

    在尝试了各种可能性之后,我发现你可以检查鼠标是否在 select document.elementsFromPoint .

    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>