Je souhaite désactiver le menu contextuel par défaut lorsqu'un utilisateur clique avec le bouton droit sur un champ de saisie pour afficher un menu contextuel personnalisé. D'une manière générale, son assez facile de désactiver le menu contextuel en faisant quelque chose comme:jQuery: preventDefault() ne fonctionne pas sur les événements d'entrée/de clic?
$([whatever]).bind("click", function(e) { e.preventDefault(); });
Et en fait, je peux le faire sur à peu près tous les éléments sauf pour les champs d'entrée dans FF - Quelqu'un sait pourquoi ou pouvait pointez-moi vers de la documentation?
Voici le code que je travaille avec, merci les gars.
HTML:
<script type="text/javascript">
var r = new RightClickTool();
</script>
<div id="main">
<input type="text" class="listen rightClick" value="0" />
</div>
JS:
function RightClickTool(){
var _this = this;
var _items = ".rightClick";
$(document).ready(function() { _this.init(); });
this.init = function() {
_this.setListeners();
}
this.setListeners = function() {
$(_items).click(function(e) {
var webKit = !$.browser.msie && e.button == 0;
var ie = $.browser.msie && e.button == 1;
if(webKit||ie)
{
// Left mouse...do something()
} else if(e.button == 2) {
e.preventDefault();
// Right mouse...do something else();
}
});
}
} // Ends Class
EDIT:
Désolé, après avoir lu les commentaires, je me rends compte que je dois préciser quelques petites choses.
1) Le code ci-dessus fonctionne ... dans un sens. Le code est capable de trier par quel bouton a été cliqué, il ne se soucie pas que je dis e.preventDefault() et le menu contextuel apparaît toujours. En d'autres termes, si vous mettez une alerte sur e.button vous obtiendrez votre 1 ou 0 pour la gauche et 2 pour la droite ... mais il se moque de moi et montre toujours le menu par défaut damné!
2) Si je place le sélecteur jQuery sur un autre élément (autre que l'entrée) alors tout fonctionnera, FF respectera l'appel preventDefault() et le menu contextuel par défaut ne s'affichera pas.
qu'en est-il de 'return false'? –
Aussi, essayez 'e.which' au lieu de' e.button'. – karim79
Peut être lié http://stackoverflow.com/questions/1489817/jquery-liveclick-firing-for-right-click – scott