为什么事件mouseenter在JavaScript中触发两次
Why event mouseenter fires twice in JavaScript
演示:jsfiddle
var $item = $('.item');
var $img = $item.find('img');
var handler = function(event) {
console.log('fired');
$img.remove(); // remove child
};
var handlerRestore = function() {
$item.append($img);
};
/// double fired event on chrome, safari, firefox
$('.item').mouseenter(handler);
$('.item').mouseleave(handlerRestore);
// one fired event on chrome, but double fired on firefox and safari
//$('.item')[0].onmouseenter = handler;
//$('.item')[0].onmouseleave = handlerRestore;
.item {
background: #EFEFEF;
display: inline;
float: left;
height: 300px;
margin: 0 10px 80px 0;
position: relative;
width: 300px;
transition: opacity 0.6s ease;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.item img {
margin: auto;
max-height: 300px;
max-width: 300px;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="item">
<img src="http://img.ifcdn.com/images/237b9b19a8cc0ea78a3b32b567423a4cd0acf77fb19b8c5a485325e2252a7b7a_1.jpg" />
</div>
问题:
- 为什么事件会触发两次
- 为什么原生事件在Chrome中触发一次,而jquery事件在Chrome上触发两次
- 它是如何修复的
Firefox和Safari启动了两次原生事件,也是jquery事件。我认为这是错误的。
您可以通过将事件委派给映像来解决此问题:
$('.item').on('mouseenter', 'img', handler);
更新的fiddle
解决此问题的另一种方法是在第一次和每次调用handleRestore()
时仅附加一次事件。
var handlerRestore = function(){
$item.one('mouseenter', handler);
console.log('restored');
$item.append($img);
};
$item.one('mouseenter', handler);
Fiddle 2
.on()函数可以解决您的问题。您甚至可以用"document"设置事件。正如您可以在"document()"上调用.on()函数并设置您想要的任何事件一样。
以下是链接:http://www.w3docs.com/learn-javascript/javascript-events.html
相关文章:
- Meteor Router数据函数被调用两次
- 从MySQL数据库中获取输入数据需要两次页面刷新
- Module.start()已激发两次
- Jquery点击事件必须点击两次
- Append元素在运行两次函数后不显示
- 防止双击执行两次jQuery post请求
- 我必须点击两次才能激活任何按钮操作(离子/角度)
- 单击jQuery会激发两次
- 如何避免在树上走两次
- button.单击两次删除附加操作后不工作
- 由于$compile,Javascript(Angular)嵌套指令加载了两次
- 单击元素两次后执行操作
- AngularJs正在阻止链接被点击两次
- 为什么我的路线处理程序会触发两次
- 为什么Highchart在我的rails应用程序中加载了两次?(未捕获的Highcharts错误#16)
- 在列表中至少使用两次随机生成的nr
- 检查某个键是否按下两次
- 一次点击,两次'单击'事件已启动
- 为什么事件mouseenter在JavaScript中触发两次
- Javascript mouseenter事件激发了两次