在不调用onclick-event的情况下调用ondblclick

时间:2013-09-09 13:45:18

标签: javascript html

在HTML标签内是否有一个没有jquery的简单解决方案会调用ondblclick而不会导致onclick发生?

这总是关闭窗口,虽然它应该只显示警告:

<a href="#" ondblclick="alert('dbl')" onclick="window.close();">X</a>

(它仅适用于javascript弹出窗口,因为您无法使用window.close();关闭主窗口)

6 个答案:

答案 0 :(得分:7)

我的猜测是,每个解决方案都会遇到问题,双击超时长度因上述评论中 Irvin Dominin aka Edward 所描述的用户偏好而异:

  

来自jQuery文档,但相关:“将处理程序绑定到不可取   同一元素的click和dblclick事件。序列   触发的事件因浏览器而异,有些不同   在dblclick之前接收两个单击事件,其他只有一个。   双击灵敏度(检测到的点击之间的最长时间   作为双击)可能因操作系统和浏览器而异,而且是   通常是用户可配置的。“

我放弃使用双击并使用CTRL +点击:

<a href="#" onclick="if(event.ctrlKey) { 
 alert('CTRL+Mouseclick'); return false; 
} else { window.close(); }">X</a>

请参阅:

  

Catch onclick-event with CTRL pressed

答案 1 :(得分:4)

我已使用以下代码解决

<a id="press" href="javascript:void(0)" onclick="singleClick(event)"
    ondblclick="doubleClick(event)">Click here</a>

<div id="log"></div>

我的 JavaScript 将是,

    var timer;
    var status = 1;

    function singleClick(event) {
        status = 1;
        timer = setTimeout(function() {
            if (status == 1) {
                document.getElementById("log").innerHTML ='I  am single click !';
            }
        }, 500);

    }

    function doubleClick(event) {
        clearTimeout(timer);
        status = 0;
        document.getElementById("log").innerHTML = 'I  am a double  click!';
    }

请让我知道状态。希望这有帮助。

答案 2 :(得分:2)

我认为这是一个难以处理的情况,你可以使用超时,但你无法确定正确的行为。

在jQuery(但也是vanilla)文档中有一个重要的注释,告诉我们避免单击和双击的处理:

  

不建议将处理程序绑定到click和dblclick   同一元素的事件。触发的事件顺序各不相同   从浏览器到浏览器,有些人之前接收过两次点击事件   dblclick和其他人只有一个。双击灵敏度(最大值   检测为双击的点击之间的时间可能会有所不同   操作系统和浏览器,通常是用户可配置的。

因此,简而言之:

  1. 如果您可以使用单个处理程序重构UI
  2. 或者使用建议here的超时,但不是防弹

答案 3 :(得分:1)

JS:

var single;

HTML:

<a href="#" 
  ondblclick="single=0; alert('dbl')" 
  onclick="single=1; setTimeout(function(){
    if (single) window.close();
  },300);">X</a>

答案 4 :(得分:0)

从您的代码中看起来您希望两者都能根据点击次数而工作,那么最好在点击之间引入一个短暂的超时并相应地运行相应的功能。您可以查看here

答案 5 :(得分:0)

我知道你不想为你的问题做些什么,但这是一种轻松使用点击和双击的方法:

如果您需要通过单击选择对象(或保存变量),则可以使用javascript调用&#34; href&#34;中的函数。

然后你可以使用&#34; ondblclik()&#34;直接编辑注册表,而不单击编辑按钮。

&#34; href&#34;中的功能总是被执行,因此不要使用&#34; alert()&#34;进行测试,您将无法双击,因为消息窗口将打开。它运行2次,然后执行可能有问题的操作,但不保存或更新变量。

&#13;
&#13;
function clickMe(c){
  var link = document.getElementById('link');
  link.innerHTML = "Clicked: "+c;
}
&#13;
<a id="link" href="javascript:clickMe(1);void(0);" ondblclick="clickMe(2);">Click Me</a>
&#13;
&#13;
&#13;