jQuery mouseenter事件无法控制地触发
jQuery mouseenter event firing uncontrollably
我想知道是否有人以前遇到过这种情况,或者可以告诉我我的代码出了什么问题。
我有一个在mouseenter上可以加宽和更改文本的按钮。在鼠标离开时,它会恢复到原来的状态。
我在这里架起了一把小提琴。这是相关代码(缩写):
var labelChanger = function (off, on) {
$el.off('mouseenter').off('mouseleave');
$el.mouseenter(function (e) {
e.stopPropagation();
changeContent(on);
$(this).animate({'width': '70%'}, 50);
}).mouseleave(function (e) {
e.stopPropagation();
changeContent(off);
$(this).animate({'width': '50%'}, 50);
});
};
它工作正常,但有一件奇怪的事情发生了,如果鼠标从顶部或底部进入盒子,它可能会进入一种状态,鼠标的任何移动都会触发鼠标进入事件(大约25%的时间都会发生这种情况)。你可以看到它被元素"闪烁"触发,我在它下面添加了一些日志。
但是,如果鼠标从侧面进入,它是稳定的,并将按预期行事。
有人知道为什么会这样吗???我被难住了。
当使用off()
时,您也应该使用on()
,而鼠标输入的问题是事件冒泡,当插入新内容时,该新内容上的鼠标输入冒泡,触发新事件等
var labelChanger = function (off, on) {
$el.off('mouseenter').off('mouseleave');
$el.on({
mouseenter: function (e) {
if (e.target == this) {
changeContent(on);
$(this).animate({'width': '70%'}, 50);
}
},
mouseleave(function (e) {
changeContent(off);
$(this).animate({'width': '50%'}, 50);
}
});
};
FIDDLE
当您修改跨度的内容时,大小的变化(由文本长度的变化引起)会导致鼠标快速"离开"answers"重新进入"跨度。鼠标进入/退出事件从跨度到包装器,触发脚本再次更改它并重新启动链。
相关文章:
- JS编译器/包管理器,用于版本控制
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- 如何控制组件'的createContent函数被激发
- 节点协同与生成器和Promise并行流量控制
- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- 使用:new Image()控制加载html.src=html_URL
- 传单缩放控制位置错误
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 如果类不是一个选项,如何在使用 jQuery 时控制(避免)嵌套 html 元素的样式
- 使用jQuery控制来自图像的音频
- CORS:否'访问控制允许来源'header-但是php设置头文件
- "访问控制允许起源”;通过javascript从http页面调用同一网站的httpsurl时出现问题
- 为什么可以't我将检索到的文档分配给控制台中的变量
- CORS:访问控制允许原点不等于提供的原点
- javascript window.open将无法在Chrome控制台上工作
- onmousedown更改光标;可能需要控制事件冒泡
- 飞行前响应中的访问控制允许标头不允许Angularjs请求标头字段访问控制允许标题
- django没有访问控制允许删除原始标头
- jQuery mouseenter事件无法控制地触发