【问题标题】:javascript differentiate between click and double click [duplicate]javascript区分单击和双击[重复]
【发布时间】:2017-04-29 11:25:33
【问题描述】:

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

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

在这里单击它会将 a 的值设置为 true 或 false。但是当它双击时它会同时执行单击和双击

如何只检查单击和双击

【问题讨论】:

标签: javascript dom-events


【解决方案1】:

This thread 提供有关行为发生原因的详细信息,但这里是针对您的特定用例的解决方案。一种可能的方法是使用timeout 和一些等待时间。问题是没有标准的等待时间间隔。虽然您可以使用a mobile browser uses300 ms 计时来区分tapdouble tap 事件:

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 is pertainingtapdouble tap 事件的间隔,不确定它是否适用于clickdblclick。我会在回答中提到这一点。
  • @Maximus 这似乎是一个不错的方法,但是当我双击它时,它会在控制台中记录世界,它也会在最后执行handleClick。我不想执行handleClick。双击
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
相关资源
最近更新 更多