15

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

这总是关闭窗口,尽管它应该只显示警报:

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

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

4

6 回答 6

7

我的猜测是,每个解决方案也会存在双击超时长度因用户偏好而异的问题,该问题由Irvin Dominin aka Edward在上面的评论中描述:

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

我放弃了使用双击,而是使用了 CTRL+单击:

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

看:

按下 CTRL 时捕获 onclick 事件

于 2013-09-10T07:19:09.977 回答
5

我已经用下面的代码解决了这个问题,

<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!';
    }

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

于 2013-09-10T06:43:50.723 回答
2

我认为这是一种难以处理的情况,您可以使用超时,但您不能确定正确的行为。

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

不建议将处理程序绑定到同一元素的 click 和 dblclick 事件。触发的事件顺序因浏览器而异,有些在 dblclick 之前接收两个点击事件,而另一些只接收一个。双击灵敏度(检测为双击的两次单击之间的最长时间)可能因操作系统和浏览器而异,并且通常可由用户配置。

所以简而言之:

  1. 如果您可以使用单个处理程序重构您的 UI
  2. 或者按照这里的建议使用超时,但不会是防弹的
于 2013-09-10T06:48:42.137 回答
1

JS:

var single;

HTML:

<a href="#" 
  ondblclick="single=0; alert('dbl')" 
  onclick="single=1; setTimeout(function(){
    if (single) window.close();
  },300);">X</a>
于 2017-02-07T14:27:30.267 回答
0

I know it's not what you want to do for your question, but here's a way to use a click and a double easily:

If you need to select an object with a click (or save a variable for example), you can use javascript to call a function in a "href".

Then you can use the "ondblclik ()" to directly edit the registry, without clicking the edit button.

The function in the "href" is always executed, so do not test it with "alert ()", you will not get a double click, as the message window will open. It runs 2 times, then perform an action that can be a problem, but not to save or update variables.

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

于 2015-02-20T14:17:41.760 回答
0

从您的代码看来,您似乎希望两者都根据点击次数工作,那么最好在点击之间引入短暂的超时并相应地运行相应的功能。你可以看看这里

于 2013-09-10T06:29:46.390 回答