2017-02-22 2 views
0

J'ai un clic droit désactivé dans mon application à l'aide de ce qui suit:Comment puis-je activer et désactiver avec le bouton droit de la souris les fonctions de JS?

<body oncontextmenu="return false;"> 

J'ai un élément textarea qui a permis spellcheck. Je veux pouvoir cliquer avec le bouton droit de la souris dans ce champ (pour vérifier l'orthographe) mais je veux que le clic droit soit désactivé partout ailleurs dans l'application.

je l'ai fait ce qui suit:

<textarea onfocus="rightclickon()" onblur="rightclickoff()" spellcheck="true"></textarea> 

Ce sont les fonctions:

function rightclickon() { 
$('body').prop('oncontextmenu', 'null'); 
}//end rightclickon 
function rightclickoff() { 
$('body').prop('oncontextmenu', 'return false'); 
}//end rightclickoff 

Ma logique derrière ce qui précède est que chaque fois que l'utilisateur entre dans la zone de texte, un clic droit serait activé mais quand ils quittent le terrain, il sera de nouveau désactivé. Cela ne fonctionne pas comme je m'y attendais.

La première partie fonctionne (le clic droit est activé lorsque l'utilisateur entre dans le champ). Cependant, lorsque le champ est laissé, le clic droit n'est pas désactivé à nouveau. Il reste juste sur.

Est-ce que c'est un moyen plus facile de réaliser ce que je veux?

+3

pourquoi vous désactivez un clic droit? – guradio

+0

Pour que l'application HTML ressemble plus à une «application» et moins à un site Web. – cleverpaul

+0

La désactivation du menu contextuel du navigateur est ennuyante pour les utilisateurs. Il y a rarement une bonne raison de le faire, et vouloir avoir une certaine «sensation» n'est pas une bonne raison. Et les utilisateurs technophiles peuvent le contourner de toute façon. – nnnnnn

Répondre

3

inspectent simplement l'origine de l'événement et décider quoi faire en conséquence

document.addEventListener('contextmenu', function(e) { 
 
    if (!e.target.matches('textarea')) { 
 
    e.preventDefault() 
 
    } 
 
}, false)
<p>Some paragraph</p> 
 
<ul> 
 
    <li>List 1</li> 
 
    <li>List 2</li> 
 
    <li>List 3</li> 
 
</ul> 
 

 
<textarea>Just try right-clicking in here</textarea> 
 
<p>Another paragraph</p>

Voir https://developer.mozilla.org/en/docs/Web/API/Element/matches pour plus de détails sur les Element.matches

+0

intéressant si vous maintenez la touche shift dans Firefox, il affiche le menu contextuel tout en cliquant droit –

+0

Parfait! Exactement ce que je cherchais. – cleverpaul

+1

@MatthewLock oui, il y a généralement beaucoup de façons autour des sites qui tentent de bloquer le clic droit – Phil