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