簡體   English   中英

防止雙擊 HTML 中的鏈接時出現默認的單擊事件

[英]Prevent default single click event on double click on a link in 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 次。

即使是一個簡單的代碼,如:

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

這些天無法阻止重定向。 對我來說有什么替代解決方案嗎? 理想情況下,我不想使用e.preventDefault()因為這個腳本是 TamperMonkey 的一部分,我覺得e.preventDefault()會破壞對大量網站的單擊。

有什么方法可以將事件保持 250 毫秒,或者取消並引發相同的事件(它的行為必須與上一個相同,因此任何站點都沒有問題)。 我幾乎什么都開放。 我寧願我的腳本在某些站點上不起作用,而不是破壞任何站點。

我認為您正在尋找dblclick javascript 事件。 它目前可用於所有更新的瀏覽器。

這里已經有一個帖子: 檢測瀏覽器/設備是否支持雙擊事件來檢測是否支持通過使用超時來檢查第一次點擊后是否還有一次點擊。

這是我為解決問題而編寫的一段代碼:

$.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);
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM