J'ai remarqué un comportement étrange de la fonction c'est bon et dandy jusqu'à ce que vous cliquez avec le bouton droit de la souris sur le "Live "Link et il incendie le gestionnaire, puis n'indique pas le menu contextuel. Le gestionnaire d'événements ne tire pas du tout (comme prévu) sur le lien "normal". P> J'ai été capable de le contourner en changeant le gestionnaire à ceci: p> code> dans jQuery:
function clickHandler(e) {
if (e.button != 0) return true;
// normal handler code here
return false;
}
5 Réponses :
C'est un problème connu : P>
Il semble que Firefox ne tire pas un Cliquez sur l'événement pour l'élément sur un Cliquez avec le bouton droit de la souris, bien qu'il tire une Mousedown et MouseUp. Cependant, il fait em> tirez un événement de clic sur
document code>! Depuis
.Live code> captures Événements au niveau du document, il voit l'événement de clic pour l'élément même Bien que l'élément lui-même ne le fait pas. Si Vous utilisez un événement comme MouseUp, les deux l'élément
p code> et le document
code> verra l'événement. P> blockQuote>
Votre solution de contournement est le meilleur que vous puissiez faire pour l'instant. Il semble affecter seulement Firefox (je crois que c'est en fait un bug dans Firefox, pas jQuery en soi). P>
Voir aussi Cette question a demandé hier. p>
Ceci est une conséquence malheureuse de la manière dont live code> est implémenté. Il utilise en fait des bouilloires d'événement afin que vous n'ayez pas contraignant à l'événement de clic de l'élément d'ancrage, vous liez l'événement de clic du document. P>
Nope, il y a une faille dans la façon dont Firefox bulles cliquez avec le bouton droit de la souris. Voir Unixpapa.com/js/mouse.html
@CRESCENTFRESH: Je ne sais pas à quel point la foi de placer dans un article indique que «Macintosh versions de Safari, bien sûr, sont à l'abri de ces problèmes, car les Macintoshès ont un seul bouton de la souris» - la dernière fois que j'ai utilisé un Mac avec Une souris à bouton unique était parfois avant que TBL a inventé le Web ;-)
J'ai trouvé une solution - "corriger" le code dans la source non infilive de jQuery 1.3.2 autour de la ligne 2989 Il y a une fonction appelée live () code> le code lui-même.
LiveHandler () code>. Modifiez le code pour ajouter une ligne: P>
2989: function liveHandler(event) {
2990: if (event.type == 'click' && event.button != 0) return true;
Vous pouvez réellement le réécrire comme suit: et appelez-le lorsque vous ajoutez un nouvel élément DOM, il devrait avoir le résultat attendu (pas de tir à la souris sur l'événement de clic droit). p> p>
Ouais, mais cela défaite le but de live () code> n'est-ce pas?
vrai, mais en direct (clic) agit différemment du clic normal () qui peut être corrigé si vous détectez quel bouton a été enfoncé, mais vous devez savoir exactement quel navigateur a été utilisé (c'est-à-dire agit différemment dans les versions antérieures que les versions plus récentes et toutes les autres. Les navigateurs agissent le «correct»). C'est une solution beaucoup plus élégante pour le moment.
J'ai résolu ceci en utilisant des événements de MouseDown. Dans ma situation, la distinction entre MouseDown et clic n'a pas d'importance. P>
Comment posez-vous une question à l'avenir?
J'étais excité de voir votre solution de contournement ici et essayé rapidement sur ma propre application, et bien que les liens qui cliquent sur maintenant peuvent être pris et ignorés, je ne vois toujours pas mon menu contextuel avec le bouton droit de la souris sur ces . En outre, mon bouton de souris du milieu Cliquez sur (Ouvrir dans un nouvel onglet) ne fonctionne pas non plus. Mais au moins le gestionnaire peut retourner tôt!
En fait, il semble que je clics de droite à plusieurs reprises, rapidement, je peux parfois obtenir le menu contextuel à apparaître .... hmmm.
On dirait qu'un double clic droit est ce qui aura systématiquement un menu contextuel pour moi dans Firefox lors de l'utilisation de
Live code> en cliquant ...