【问题标题】:Single click and Double click on the same element, not working; Javascript单击和双击同一元素,不起作用; Javascript
【发布时间】:2017-09-09 02:39:36
【问题描述】:

我正在尝试添加单击按钮时触发的单击功能。我也在试图弄清楚如何在同一个元素上添加双击功能,从而触发不同的事件。

var click = false;
onEvent("image2", "click", function(event) {
  click = true;
});
if (click === true) {
  setTimeout(function() {
    onEvent("image2", "click", function(event) {
      setScreen("safeScreen");
      console.log("double click");
    });
  }, 200);
} else {
  onEvent("image2", "dblclick", function(event) {
    setScreen("safeScreen");
    console.log("click");
  });
}

这段代码完全错误,但我不知道从哪里开始/更正。我究竟做错了什么?我希望用户双击时不会触发单击。

【问题讨论】:

标签: javascript code.org


【解决方案1】:

更新:

尝试像这样将函数 clicks() 传递给您的事件侦听器:

onEvent("image2", "click", clicks);

函数clicks() 将根据setTimeout 函数检查是否有单击或双击。您可以通过timeout 变量调整setTimeout,当然您需要在clicks() 函数之外声明clickCount 变量。


纯 js 方法

尝试添加两个事件监听器。更少的代码,更干净。检查这个工作示例。

var selector = document.getElementById('codeorg');
selector.addEventListener('click', clicks);


// Global Scope variable we need this
var clickCount = 0;
// Our Timeout, modify it if you need
var timeout = 500;
// Copy this function and it should work
function clicks() {
  // We modify clickCount variable here to check how many clicks there was
  
      clickCount++;
      if (clickCount == 1) {
        setTimeout(function(){
          if(clickCount == 1) {
            console.log('singleClick');
            // Single click code, or invoke a function 
          } else {
            console.log('double click');
            // Double click code, or invoke a function 
          }
          clickCount = 0;
        }, timeout || 300);
      }
}



// Not important for your needs - pure JS stuff
var button = document.getElementById('button');

button.addEventListener('click', singleClick);
button.addEventListener('dblclick', doubleClick);

function singleClick() {
  //console.log('single click');
}

function doubleClick() {
  console.log('double click');
}
#codeorg {
  margin-bottom: 100px;
}
<h2>Double Click</h2>

<button id="button">Click me</button>


<hr><hr>


<h2>Double click or Single Click</h2>

<button id="codeorg">Click me</button>

【讨论】:

  • 由于某种原因,我正在使用的编码环境说:“错误:第 4 行:TypeError:未定义不是函数”。尝试在我的编码环境中测试您的代码后,它给了我这个错误。
  • 我明白了,您使用的是严格模式。我已经更新了我的答案,现在应该可以工作了。我错过了var。
  • 现在第 1 行显示“未知标识符:文档”。
  • 我们需要使用的编码环境很奇怪,似乎限制了javascript的很多功能。你熟悉 code.org 吗?
  • 没听说过,但是单独运行这段代码不能解决问题吗? onEvent("image2", "dblclick", function(event) { console.log("click"); });
猜你喜欢
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
相关资源
最近更新 更多