Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript区分单击和双击_Javascript_Dom Events - Fatal编程技术网

javascript区分单击和双击

javascript区分单击和双击,javascript,dom-events,Javascript,Dom Events,我有一个简单的程序,如: <div onclick="handleClick(event)" ondblclick="handleDoubleClick(event)"> Hellooww world </div> <script> var a = false function handleClick(e) { if(a) { a = false console.log("Hellooww",

我有一个简单的程序,如:

<div onclick="handleClick(event)" ondblclick="handleDoubleClick(event)">
  Hellooww world
</div>
<script>
    var a = false
    function handleClick(e) {
    if(a) {
        a = false
            console.log("Hellooww", a)
    }else{
        a = true
      console.log("Hellooww", a)
    }
    }

  function handleDoubleClick(e) {
    console.log("world")
  }
</script>

你好世界
var a=错误
函数handleClick(e){
如果(a){
a=错误
log(“Hellooww”,a)
}否则{
a=正确
log(“Hellooww”,a)
}
}
函数句柄双击(e){
console.log(“世界”)
}
单击此处,它会将a的值设置为true或false。。但当它双击时,它同时执行单点和双击

如何仅检查单击和双击

提供了有关行为发生原因的详细信息,但以下是针对特定用例的解决方案。一种可能的方法是使用
超时
和一些等待时间。问题是没有标准的等待时间间隔。虽然您可以使用
300 ms
计时来区分
点击
双击
事件:

var a = false;
var timeout;
function handleClick(e) {
    timeout = setTimeout(function () {
        if (a) {
            a = false
            console.log("Hellooww", a)
        } else {
            a = true
            console.log("Hellooww", a)
        }
    }, 300);
}

function handleDoubleClick(e) {
    if (timeout) {
        clearTimeout(timeout);
    }
    console.log("world")
}

但一般来说,不要在同一个元素上注册click和dblclick事件:无法正确区分导致dblclick事件的单击事件和单击事件。

这个答案很有趣(也很相关):。你是如何达到300ms的?@FelixKling,这是一个有效的问题:)。我记得在某个地方读到过这样一篇文章,即浏览器等待区分双击或其他单击事件的时间。这不是真的吗?我不知道,但有一个资源来支持这将是伟大的@FelixKling,实际上,这个
300
ms到
tap
double tap
事件的间隔似乎不确定是否适用于
click
dblclick
。我会在我的回答中提到这一点。@Maximus这似乎是一个不错的方法,但在这里,当我双击它时,它会在控制台中记录世界,并且它会在最后执行
handleClick
。。我不想在双击时执行
handleClick