当我使用中间点击时,我需要弹出警告,如果我在链接上但在页面的任何其他元素上(或仅在空白区域上)单击它,则必须弹出警告。
var test = {
pageMiddleClickListener : function(e) {
if(e.which === 2) {
//if (!gContextMenu.onLink) {
alert('ok');
//}
}
}
window.addEventListener("click",test.pageMiddleClickListener,false);
当我使用中间点击链接时的警报显示,但我需要阻止此行为链接
我需要类似“!gContextMenu.onLink”的内容,但不需要上下文菜单(不含)
答案 0 :(得分:2)
您可以使用<a>
方法检查是否点击了prop
。
$(this).prop("tagName") == "A"
在您的事件监听器中:
var test = {
pageMiddleClickListener : function(e) {
if(e.which === 2) {
// not an <a> ?
if ($(this).prop("tagName") !== "A") {
alert('ok');
}
}
}
window.addEventListener("click",test.pageMiddleClickListener,false);
答案 1 :(得分:2)
您可以通过多种方式测试点击的target
是否为链接。一种方法是检查Element.tagName
是否A
,另一种方法是测试href
属性。事实证明,还需要测试是否有任何目标的parentNode
是链接。
var test = {
pageMiddleClickListener : function(e) {
if(e.button === 1) {
if (!test.isLinkOrAParentIsLink(e.target)) {
e.view.alert('ok');
}
}
},
isLinkOrAParentIsLink : function(el) {
if (el.tagName === "A") {
return true;
} //else
let parent= el.parentNode;
while (parent !== null && typeof parent.tagName !== "undefined") {
if (parent.tagName === "A") {
return true;
} //else
parent= parent.parentNode;
}
return false;
}
}
window.addEventListener("click",test.pageMiddleClickListener,false);
或
isLinkOrAParentIsLink : function(el) {
if (el.hasAttribute("href")) {
return true;
} //else
let parent= el.parentNode;
while (parent !== null && typeof parent.tagName !== "undefined") {
if (parent.hasAttribute("href")) {
return true;
} //else
parent= parent.parentNode;
}
return false;
}
注意:我将e.which
更改为e.button
,因为这是click events规范中的内容,MouseEvent.which
是非标准的。请注意,这也需要测试e.button === 1
而不是2。