javascript - mouseup 事件停止 firefox 上的 click 事件

标签 javascript firefox click mousedown mouseup

我有一个奇怪的问题!

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

最佳答案

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

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

当您修改 mousedown 上的innerHTML 时,您用新的 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>

关于javascript - mouseup 事件停止 firefox 上的 click 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34433585/

相关文章:

android - 在 Xamarin Android 中处理 ItemClick 或 Click

javascript - $(...).live 不是函数错误和复选框选中错误

javascript - 页面重新加载后,this.id 在 onchange 事件中未定义

Javascript ES6 将对象数组映射到 Set 或按不同属性过滤掉

javascript - 可以将 "paste image"支持破解到 Firefox 中的文本区域吗?

css - 自定义光标图像 CSS

java - 如何从命令行优雅地杀死火狐

javascript - 使用 Chrome 模拟 JQuery 中的链接单击 - 同时使用 href 和下载

javascript - 无法访问 ng-include 文件 $scope 的形式

javascript - 更改 [object].prototype 与 [object] 的嵌套函数