mouseup事件停止firefox上的click事件
the mouseup event stop the click event on firefox
我有一个奇怪的问题!
在div元素上,我监听mousedown、mouseup和click事件。
但在firefox上,点击事件永远不会起作用!在Chromium或Trident上(哇)它工作得很完美。如果元素是一个按钮,它可以工作,但不能在div.上工作
<div>click me</div>
<script>
var div = document.querySelector('div');
function fn(e)
{
if(e.target === div)
div.innerHTML = 'event ' + e.type;
}
// work
div.addEventListener('mousedown',fn);
// work
div.addEventListener('mouseup',fn);
// nop !
div.addEventListener('click',fn);
// nothing !
document.addEventListener('click',fn,true);
</script>
https://jsfiddle.net/aL7q8qpv/7/
问题(我称之为bug)似乎是对innerHTML的修改。
根据规范,当mousedown和mouseup对同一目标(元素)开火时,应该触发点击。
当您在mousedown上修改innerHTML时,您将一个Node(一个TextNode)替换为一个新的TextNode,mouseup的目标似乎发生了变化。
但这不是预期的行为,因为目标应该是ElementNode,而不是TextNode(它仍然是同一个Element)。
可能的修复方法:修改现有TextNode的内容,而不是innerHTML:
var div = document.querySelector('div');
function fn(e)
{
div.firstChild.data='Event:'+e.type;
}
div.addEventListener('mousedown',fn);
div.addEventListener('mouseup',fn);
div.addEventListener('click',fn);
<div>
click me
</div>
您需要了解之间的区别
鼠标按下:[SIMPLE EVENT]当任何鼠标按钮(左/中/右)按下时激发,即按下
鼠标向上:当任何鼠标按钮(左/中/右)向上时触发,即释放
单击:在完成此循环后,当鼠标按钮向下并向上时激发[复杂事件]。
当我们向BASIC SIMPLE EVENTS添加监听器时,CLICK事件永远不会被触发!
更多信息,请访问http://javascript.info/tutorial/mouse-events
相关文章:
- 在javascript中传递onmouseenter事件上的onfocus
- 如何隐藏按钮单击事件上的占位符
- 如何在asp:linkButton上显示鼠标悬停事件上的图像
- 按键事件上的简单HTML输入不起作用
- 文本更改事件上的回发事件
- 如何在 jQuery 中存储单击事件上的按钮的值
- 活动事件上的 HTML 元素
- 正在更新API事件上的innerHTML
- 如何在ReactJS中添加或删除事件上的className
- 未从url激发事件上的主干路由器
- 鼠标输入事件上的jQuery延迟出现问题
- 如何在asp.net中调用客户端点击事件上的2个javascript
- 悬停事件上的删除按钮
- JQuery:更改dragstart事件上的DOM会立即触发dragend
- 如何在jQuery中绑定同一事件上的多个id
- 如何在 redis 中将 JS 对象传递给它自己的事件参数 - 连接事件上的哨兵
- 弹出窗口关闭事件上的更改按钮
- 更改 onclick 事件上的锚标记背景颜色
- 如何使用 jquery 替换点击事件上的文本
- Javascript/HTML5 - 更改鼠标事件上的文本