【问题标题】:the mouseup event stop the click event on firefoxmouseup 事件停止 firefox 上的点击事件
【发布时间】:2016-03-29 18:21:31
【问题描述】:

我有一个奇怪的问题!

在 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/

【问题讨论】:

  • @AlexanderM。问题是click 事件没有被触发或被阻止。现在奇怪的是,如果你抛出错误,那么所有三个事件都会被触发。 Sample Fiddle
  • 有一个注册的bug。请检查这是否有帮助。
  • 什么@Dr. Molle 的意思是,当您更改 div 的 html 时,节点正在更改,并且根据文档,如果在同一节点上触发 mouseDown、mouseUp,则触发单击事件。由于您正在更新节点,因此在 mouseUp 之后,它被视为新节点,这很奇怪!但是如果你不更新节点,它工作正常。

标签: javascript firefox click mousedown mouseup


【解决方案1】:

你需要了解两者的区别

mousedown : [简单事件] 当任何鼠标按钮(左/中/右)向下即按下时触发

mouseup : [简单事件] 当任何鼠标按钮(左/中/右)向上即释放时触发

click : [COMPLEX EVENT] 在此完整循环之后,当鼠标按钮按下和升起时触发。

当我们向 BASIC SIMPLE EVENTS 添加侦听器时,CLICK 事件永远不会被触发!

更多信息请访问http://javascript.info/tutorial/mouse-events

【讨论】:

【解决方案2】:

问题(我称之为 bug)似乎是对 innerHTML 的修改。

根据规范,当 mousedown 和 mouseup 在同一目标(元素)上触发时,应触发单击。

当您在 mousedown 上修改 innerHTML 时,您将一个节点(一个 TextNode)替换为一个新的 TextNode,mouseup 的目标似乎发生了变化。

但这不是预期的行为,因为目标应该是 ElementNode,而不是 TextNode(它仍然是同一个元素)。

可能的修复: 修改现有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>

【讨论】:

  • 这里无关(我已经删除了)
  • @Dr.Molle,一个小问题,如果我使用textContent 更新 div 内的元素,节点/元素会自我更新,使其成为新节点吗?
  • 谢谢你,我的问题解决了,如果你在监听的元素里面有一个元素,你可以把css规则“pointer-events: none”设置为on,然后安静的编辑他。
  • 我仍然会在 2019 年称其为错误。例如,这描述了为什么 select html 元素在 mousse up 时意外关闭。这就是为什么我们没有看到 select 元素被大量使用的原因。 Firefox 中的行为很奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多