页面中间点击监听器

时间:2015-07-23 18:08:15

标签: javascript jquery firefox-addon

当我使用中间点击时,我需要弹出警告,如果我在链接上但在页面的任何其他元素上(或仅在空白区域上)单击它,则必须弹出警告。

var test = {
pageMiddleClickListener : function(e) {
    if(e.which === 2) {     
        //if (!gContextMenu.onLink) {
            alert('ok');
        //}
    }
}
window.addEventListener("click",test.pageMiddleClickListener,false);

当我使用中间点击链接时的警报显示,但我需要阻止此行为链接

我需要类似“!gContextMenu.onLink”的内容,但不需要上下文菜单(不含)

2 个答案:

答案 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。