Отключить правый клик на каждом теге, кроме текстовой области и текстового поля - PullRequest
0 голосов
/ 18 сентября 2011

Я нашел этот кросс-браузерный скрипт

<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>

Как я могу сказать, что щелчок правой кнопкой мыши должен работать для каждой текстовой области и для каждого тега текстового поля?

PS: я знаю, пользователи ненавидят, когда вы деактивируете правый клик! Но на моей странице это очень полезно.

Ответы [ 2 ]

1 голос
/ 18 сентября 2011

Как отметил Пекка, отключение правого клика - это почти всегда неправильное действие.«Хотелось бы услышать, для чего вам это нужно (и объяснить, почему вам это не нужно;)).Но, если вам нужно, по крайней мере, используйте этот приятный на ощупь 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();
  }
}
1 голос
/ 18 сентября 2011

ПРИМЕЧАНИЕ. В некоторых браузерах переменная 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;
}

Вот демо

, такимЦелевой тип с вами, вы можете обработать условие для отключения правой кнопки мыши следующим образом:

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
}
...