Mousenter事件侦听器在元素内移动鼠标时触发多次,但仅在更新innerHTML时触发

阿魏酸

在我的代码中,我尝试在mouseenter事件上更新按钮的innerHTML。

我希望每次鼠标移入元素时都会触发该事件,但是当鼠标元素移动时,事件侦听器将触发多次。如果删除在事件监听器中更新innerHTML的行,则会得到预期的行为。

为什么会这样,我该如何解决?请参见下面的代码和链接的JSFiddle。

https://jsfiddle.net/h7gsv69m/2/

var box = document.getElementById('box');
var button = document.createElement('button');
button.innerHTML = '<svg><use xlink:href="#icon-added"></use></svg>';

button.addEventListener('mouseenter', function() {
    document.getElementById('log').innerHTML += '<li>Mouseenter</li>';
    var iconHover = this.dataset.iconHover;
    //Comment out the following line to see expected behavior.
    this.innerHTML = '<svg><use xlink:href="#icon-remove"></use></svg>';
});

box.appendChild(button);
KevBot

SVG有一个可能的属性,称为指针事件此属性确定SVG是否可能是鼠标事件的目标。当SVG成为事件目标时,原始元素不再是目标,而当您离开SVG时,它将使原始元素再次成为目标,从而引发另一个事件。您可以通过添加pointer-events: none;到SVG类中来解决此问题

button svg {
    width: 22px;
    height: 22px;
    pointer-events:none;
}

查看更新的小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

单击标签元素内的文本时,Javascript事件侦听器将触发两次

如何设置滑块更改侦听器仅在JavaFX中释放鼠标拖动时才触发?

jQuery事件侦听器多次触发

创建事件侦听器时,函数会立即触发

当我在D3中触发的事件中删除相应的元素时,如何删除元素的事件侦听器?

Reosurce触发的事件将更改侦听器移动

事件侦听器未在移动设备上触发

当我在网页上的输入元素上按 Enter 键时触发的 JavaScript 事件侦听器

如何准确识别事件侦听器触发的元素?

在实现google oauth 2.0隐式登录React时,多次触发isSignedIn的侦听器

Javascript-触发函数使用反跳机制时删除事件侦听器

在Picasso库中,现在如何在我的图像加载时触发哪个事件侦听器?

当用户更改选项卡并返回时停止触发事件侦听器

从iframe事件侦听器触发时,Angular UI更改不起作用

仅当 mousedown && mouseover 为 true 时触发的事件侦听器

我想向一个元素添加一个事件侦听器,当相应的元素滚动到视图中时将触发该事件

Javascript 事件侦听器未触发

在另一个事件侦听器的回调内部进行设置时,事件侦听器回调将立即触发。ReactJS

当鼠标不在附加元素上时,鼠标悬停事件侦听器是否会影响性能?

为多个元素添加事件侦听器并检测哪个元素触发事件 - jQuery

有没有办法侦听子元素的事件侦听器的触发?

Javascript mouseenter 事件仅在光标移动足够快时触发

具有不同触发器元素和侦听器元素的自定义事件

jQuery $(窗口).resize(); 等价的事件侦听器,仅在指定的轴更改上触发?

仅在滚动事件侦听器上触发警报一次,直到页面重新加载

事件侦听器仅在第二次单击后正确触发

Symfony(5.1)主义事件侦听器被触发,但实体侦听器未触发

在焦点侦听器中更改复合可绘制对象时,EditText具有无限触发的焦点更改事件

仅在焦点元素失去焦点时才触发事件