防止双击 HTML 中的 link 时的默认单击事件
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 活动。目前可在所有更新的浏览器上使用。
这里已经有一个 post:Detect if browser/device supports double click events 来检测是否支持使用超时来检查在第一次点击后是否有另一个点击。
这是我为解决问题而编写的一段代码:
$.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);
}
});
我的代码很简单:
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 活动。目前可在所有更新的浏览器上使用。
这里已经有一个 post:Detect if browser/device supports double click events 来检测是否支持使用超时来检查在第一次点击后是否有另一个点击。
这是我为解决问题而编写的一段代码:
$.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);
}
});