不经意地被一位同事问起在javascript里面如何检测右键事件,并且屏蔽原来的右键菜单,上网查找一翻之后发现一些比较简单的方法。
如设置onmousedown,检查其event.button的值是不是2(代表右键)。
这个方法在ff和ie中都可用,但是在maxthon中event.button却是0,这让我有点困惑,maxthon不是ie内核的吗?
我只能设想maxthon这个壳是做过手脚的。然而如果设置onmouseup,其event.button值就是2了。
所以如果检测右键的话,是设置其onmouseup即可。
document.getelementbyid("test").οnmοuseup=function(oevent) {
if (!oevent) oevent=window.event;
if (oevent.button==2) {
//-- do something for user right click
// alert("mouse up");
}
}
但是如果还需要屏蔽右键的话,还是用oncontextmenu比较简单,但这时就不是检测右键,而是检测是否弹出上下文菜单。
屏蔽的方法跟屏蔽其他默认行为的方法是一样的,一般来说都是有效的,不过因为某些浏览器有禁止禁止弹出右键菜单的功能,所以如果需要在用户点击右键时做点事情,最好还是不要放在oncontextmenu中,而是放在onmouseup中并检测右键,附加oncontextmenu来屏蔽原来的菜单。
document.getelementbyid("test").οncοntextmenu=function(event) {
//-- do something here
// alert("contextmenu popup");
//-- prevent the default behavior
if (document.all) window.event.returnvalue = false;// for ie
else event.preventdefault();
};
通过一些简单的测试,可以发现在ff和在ie存在着有趣的区别。
在onmouseup和oncontextmenu事件处理中都使用alert,可以看出来是先执行onmouseup事件再到oncontextmenu的,在ie中,两者会非常连贯的在一起执行,(均认为是发生在test元素上的事件),而在ff里面则不是(前提是test元素所占区域比较小,当alert弹出时需要移动鼠标才能点击'ok'的情况下),它会先执行onmouseup,alert出来之后,移动鼠标点击'ok',这时还是会弹出菜单的,但是如果不移开鼠标,而是直接按enter确认的话,这时它就会认为是在test元素上触发的事件了。可以理解为是ie 和 firefox中的事件机制的细节区别。当然我们很少会应用到连续事件的,就无须注意到这点区别了,把需要的事件处理完整的写在一个处理方法里面就是最简单有效的解决方案了。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/