防止双击HTML中的链接时发生默认的单击事件 [英] Prevent default single click event on double click on a link in HTML

查看:167
本文介绍了防止双击HTML中的链接时发生默认的单击事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码非常简单:

var clickCount = 0, clickEl = [];
var manualClick = false;
$(document).on('click', 'a', function (e) {
    if (e.altKey || e.ctrlKey || e.shiftKey) {
        return;
    }
    clickCount = clickCount + 1;
    clickEl[clickCount] = this;

    var that = this;
    if (1 === clickCount) {
        setTimeout(function () {
            if (2 === clickCount && clickEl[1] === clickEl[2]) {
                window.stop();
                embed_anchor(that);
            }
            clickCount = 0;
        }, 250);
    }
});

它基本上检查是否有双击.如果是,它将使用window.stop()取消单击重定向.它曾经很不错,但是我不知道它是Chrome还是我的新PC,window.stop()失败9.5/10次.

It basically checks if there is double click. If yes, it cancel the single click redirect using window.stop(). It used to work great, but I don't know if it's Chrome or my new PC, window.stop() failing 9.5/10 times.

甚至是一个简单的代码,例如:

Even a simple code like:

setInterval(function () {
    window.stop();
}, 1);

这些天无法阻止重定向.有什么替代解决方案对我来说.理想情况下,我不想使用e.preventDefault(),因为该脚本是TamperMonkey的一部分,我认为e.preventDefault()会破坏对大量站点的单击.

is not able to prevent redirect these days. Is there any alternative solution for me. I ideally don't want to use e.preventDefault() because this script is part of TamperMonkey and I feel e.preventDefault() will break single click on ton of sites.

是否可以将事件保留250毫秒,或者取消并引发同一事件(它的行为必须与上一个相同,所以任何站点都没有问题).我几乎打开了所有的东西.如果脚本不能在某些站点上运行而不是破坏任何站点,我会更愿意.

Is there any way to hold the event for 250 ms, or cancel and raise the same event (It must behave like last one so no issues with any site). I am open too pretty much everything. I would prefer if my script don't work on some sites rather than breaking any site.

推荐答案

这是我为解决问题而编写的代码段:

Here is the piece of code I wrote to solve my problem:

$.fn.on2 = function(type, sel, handler) {
    this[0].addEventListener(type, function(event) {
        var t = event.target;
        while (t && t !== this) {
            if (t.matches(sel)) {
                handler.call(t, $.event.fix(event));
            }
            t = t.parentNode;
        }
    }, true);
}

var clickEvents = [];
$(document).on2('click', 'a', function (event) {
    if (event.altKey || event.ctrlKey || event.shiftKey || this.text.length == 0) {
        return;
    }
    clickEvents.push(event);

    if (event.originalEvent.isTrusted) {
        event.preventDefault();
        event.stopImmediatePropagation();
    }

    var target = this;
    if (1 === clickEvents.length) {
        setTimeout(function () {
            if (2 === clickEvents.length && clickEvents[0].target == clickEvents[1].target) {
                doWhatever(clickEvents[0].target);
            } else {
                clickEvents[clickEvents.length-1].target.dispatchEvent(new MouseEvent("click", clickEvents[clickEvents.length-1].originalEvent));
            }
            clickEvents = [];
        }, 250);
    }
});

这篇关于防止双击HTML中的链接时发生默认的单击事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆