禁用右键单击除textarea和textfield之外的每个页面

时间:2011-09-18 10:29:48

标签: javascript block right-click

我找到了这个跨浏览器脚本

<script language=JavaScript>
<!--
var message="Function Disabled!";

function clickIE4(){
    if (event.button==2){
        alert(message);
        return false;
    }
}

function clickNS4(e){
    if (document.layers||document.getElementById&&!document.all){
        if (e.which==2||e.which==3){
            alert(message);
            return false;
        }
    }
}

if (document.layers){
    document.captureEvents(Event.MOUSEDOWN);
    document.onmousedown=clickNS4;
}
else if (document.all&&!document.getElementById){
    document.onmousedown=clickIE4;
}

document.oncontextmenu=new Function("alert(message);return false")
// --> 
</script>

我怎么能说rightlick应该适用于每个textarea和每个textfield标签?

PS:我知道,当你停用右键时,用户讨厌它!但在我的页面上它非常有用。

2 个答案:

答案 0 :(得分:1)

在某些浏览器上没有设置变量e并且存在各种类似的问题..无论如何都要提出你需要获取事件的目标类型然后检查它是否是文本的问题或文本框..

这是您检索事件目标的方式:

function eventHandler(e)
{
    var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;
}

这是demo

因此,如果您使用目标类型,则可以按如下方式处理禁用右键单击的条件:

function checkIfTypeIsTextOrTextArea(event)
{
    var targ;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;
return targ==="text" || targ="textarea";
}

function eventHandler(e)
{
    var evt=e;
    if(!e)
    evt=window.event;
    if(!checkIfTypeIsTextOrTextArea(evt))
        //code to disable right click
}

答案 1 :(得分:1)

如Pekka所述,禁用右键几乎总是错误的做法。 “很想知道你需要的是什么(并向你解释为什么你不需要它。;))。但是,如果你必须,至少使用这个不错的JS,所以你看起来不像一个完整的n00b:

// Disable right-click everywhere except INPUT and TEXTAREA elements
document.body.oncontextmenu = function(e) {
  e = e || event;
  var el = e.srcElement || e.target;
  if (!(/textarea|input/i).test(el.nodeName)) {
    e.preventDefault();
  }
}
相关问题