jQuery: preventDefault() ne fonctionne pas sur l'entrée/cliquez sur les événements?
Je veux désactiver par défaut contextMenu lorsqu'un utilisateur clique avec le bouton droit sur un champ de saisie, de sorte que je peux montrer une coutume contextMenu. Généralement parlant, c'est assez facile à désactiver le menu contextuel en faisant quelque chose comme:
$([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 de saisie dans FF - ce que quelqu'un sait pourquoi ou pourrait me diriger vers de la documentation?
Voici le code, 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 me dois de préciser un peu les choses.
1) Le code ci-dessus fonctionne...dans un sens. Le code est capable de trier par quel bouton a été cliqué, il n'a tout simplement pas de soins que je dis.e.preventDefault() et le menu clic-droit encore pop up. En d'autres termes, si vous mettez une alerte sur l'e.bouton vous souhaitez obtenir votre 1 ou 0 pour la gauche et 2 pour la droite...mais il vient de se rit de moi et me montre encore les damnés de menu par défaut!
2) Si je mets le sélecteur jQuery sur un autre élément (autres que les entrées), alors tout va fonctionner, FF respecter le preventDefault() de l'appel et de la droite par défaut-cliquez sur le menu ne s'affichera pas.
return false
?Aussi, essayez de
e.which
au lieu de e.button
.Pourrait être lié stackoverflow.com/questions/1489817/...
OriginalL'auteur Jason | 2010-04-29
Vous devez vous connecter pour publier un commentaire.
Une solution de navigateur pour désactiver le menu contextuel par défaut:
Pour capturer le contextmenu événement uniquement à l'intérieur d'un élément donné d'utilisation:
Vous obtiendrez des résultats différents selon la nature exacte de l'événement scénario et du navigateur, si vous essayez d'autres méthodes que oncontextmenu pour interrompre un droit-cliquez sur l'événement.
En jQuery:
Vous pouvez également utiliser du jQuery événement.pour déterminer quel bouton a été pressé, mais vous aurez tout de même d'annuler le défaut contextmenu événement:
J'ai testé cela dans IE6 (sous Wine), Chrome 11, Firefox 3.6, Opera 11 et Safari.
aucune raison de s'en
if (event.which==3) { //something }
annule le contextmenu désactiver?OriginalL'auteur Wayne
Désolé les gars, je sais que c'est un cop-out "répondre" parce que je n'ai jamais été en mesure de comprendre exactement pourquoi les navigateurs webkit ne vous aime pas jouer avec champ de saisie des événements mais qu'importe, cela fonctionne. Donc la solution est d'appliquer de l'écouteur à l'ensemble de la fenêtre, puis il suffit de demander si la cible a la classe que vous souhaitez appliquer l'effet...et à partir de là. Pour être honnête, c'est probablement une meilleure solution, car de toute façon pour mon application particulière, cela me permet d'appliquer cette fonctionnalité à tout élément que je veux.
OriginalL'auteur Jason
Je viens de tester sous Firefox 3.6 et tout se déroule dans la première instruction if, de sorte que l'e.preventDefault() n'est jamais appelée.
Aussi, même si je mets de l'e.preventDefault() avant/en dehors du if/else-if (ce qui signifie qu'il faut tirer, peu importe), ff ne semble pas de soins.
OriginalL'auteur scott