Javascript event.button returns 右键单击​​无值

Javascript event.button returns no value for right click

我正在尝试为我的网站创建自定义上下文菜单。我无法完成第一项任务,即捕获和防止默认的右键单击。我尝试了以下方法:

function rclick(event) {
if (event==null) {event = window.event;}

var target = event.target != null ? event.target : event.srcElement;
        console.log(event.button);
if ((event.button == 2 || event.button==4 || (event.keyCode==17 && event.button ==0)) && target.tagName.toLowerCase() == 'a') {//1 and not internet explorer - middle
    event.preventDefault();
    var scrollTop = document.body.scrollTop ? document.body.scrollTop :
    document.documentElement.scrollTop;
    var scrollLeft = document.body.scrollLeft ? document.body.scrollLeft :
    document.documentElement.scrollLeft;
    document.getElementById("context").style.left = event.clientX + scrollLeft +'px';
    document.getElementById("context").style.top = event.clientY + scrollTop +'px';
    document.getElementById("context").style.display = 'block';
}

}

我已将事件附加到所有锚点元素:

 $(document).ready(function(){$("a").bind("click",function() {rclick(event);});});

当我左键单击 a 元素时,event.button 给我“0”。但是当我右键单击时,会出现浏览器上下文菜单,并且不会触发事件(该值不会出现在控制台日志中。如何捕获右键单击并防止默认?

----更新----

我添加了这一行:

$(document).ready(function(){$('a').on("contextmenu", function(evt) {evt.preventDefault();});});

这成功地阻止了在右键单击锚元素时出现上下文菜单。但是,当我将这些行添加到我的 mousedown 函数时:

 document.getElementById("conmen").style.left = event.clientX + scrollLeft +'px';                                     
 document.getElementById("conmen").style.top = event.clientY + scrollTop +'px';
 document.getElementById("conmen").style.display = 'block';

然后上下文菜单出现在我设计的自定义上下文菜单的顶部。为什么这些行会使浏览器上下文菜单出现?

你可以试试:

$(document).ready(function(){$("a").bind("mousedown",function(event) {

var btn = event.which;

if(btn == 1) {

    //Left Button

} else if (btn == 2) {

    //Middle Button

} else if (btn == 3) {

    //Right Button

}

})});

https://api.jquery.com/mousedown/