pouvez-vous lier .cliquez sur() de sorte qu'il se déclenche avant onclick?
Je suis en train d'écrire jQuery pour une application qui est en train de construire dans le programme JSF. Les composants JSF sont en utilisant beaucoup de leur propre JS pour faire tout ce que JSF fait et ils utilisent beaucoup de onclick attributs de gérer tout cela.
Est-il valide/bon moyen de lier votre propre événement de clic sur un élément et de s'assurer que votre événement se déclenche avant l'événement onclick par défaut? Il semble que par défaut de jQuery cliquez sur la fonction est déclenché après tout inline onclick appels de fonction.
- Vous ne pouvez pas faire cela, à moins que la ligne onclick attributs sont retirés de l'élément.
- Si vous utilisez la fonction jquery .cliquez sur() sur $(document).prêt (), vous pouvez appeler votre propre fonction. Je me suis demandé souvent, comment peut-jquery qui le font.
- j'étais sous l'impression que jQuery événements déclenchés avant l'événement par défaut, sinon de l'événement.preventDefault ne marcherait jamais. je voudrais essayer, sur le document prêt, la copie de la jsf .cliquez sur les événements présents, unbind eux, lier votre événement de clic, et ajouter le jsf .cliquez sur les événements grâce à jQuery. Je n'ai aucun moyen de la tester pour vous.
Vous devez vous connecter pour publier un commentaire.
En jQuery événements sont déclenchés strictement dans l'ordre dans lequel ils ont été enregistrés.
Vous pouvez contourner tout inline DOM0
onclick
style gestionnaires par itération sur l'ensemble des DOM, la suppression de cesonclick
propriétés, puis l'enregistrement de votre propre gestionnaire qui puis invoque à l'origine de la fonction définie par.Quelque chose comme:
Voir http://jsfiddle.net/alnitak/2SCTK/
Enregistrez vos propres gestionnaires d'abord avec jQuery, alors invoquer le code ci-dessus pour supprimer l'original inline
onclick
les gestionnaires et les ré-enregistrer comme si jQuery avait ajoutés.MODIFIER code simplifié suffit d'utiliser la fonction d'origine - jQuery permettra de s'assurer que la fonction est appelée avec le bon contexte. Code précédent qui de définir explicitement le contexte de
window
était incorrecte.if (!r) {ev.preventDefault();}
. Cela permettra d'éviter l'action par défaut si l'original retourne un "falsy" de la valeur (0, undefined, faux, etc.). Je suggère que vous venez dereturn orig.call(window);
à la place. J'ai fait quelques tests, et il semble de retour faux à partir d'un DOM0 événement et à partir d'unaddEventListener
agir de la même.if (r === false)
. Juste retourfalse
ne semblent travailler dans Chrome, je n'ai pas essayer d'autres navigateurs encore. Je suis sûr que j'ai eu des problèmes dans le passé, et le retour de faux n'a pas d'arrêt tous comportement par défaut.return false
dansaddEventListener()
n'est pas la même chose que de le faire en jQuery.click()
gestionnaire - apparemment jQuery cartes de lareturn false
dans l'annulation d'un évènement lui-même. mail-archive.com/[email protected]/msg71371.html, j'ai donc mis à jour le code.Function.call()
à définir le contexte.Vous pouvez supprimer le
onClick
événement à partir de l'élément DOM, et ensuite les relier à l'aide de jQuery.Événements sont appelés dans l'ordre qu'ils sont liés, de sorte que le seul moyen pour appeler votre fonction première, est de séparer, puis de relier la fonction d'origine.
Démo: http://jsfiddle.net/wYd5t/2/
onclick
DOM0 style de gestionnaire empêche de propagation ou de multiplication (c'est à direreturn false
) par rapport àaddEventListener()
style des gestionnaires?return false
). jsfiddle.net/wYd5t/1return cb.call(...)
à tous, il suffit de passer la fonction de.click
comme vous l'avez fait dans votre réponse.Il n'y a aucun moyen de mandat en cas d'ordre de tir pour le même écouteur sur le même élément.
Chaque navigateur est libre d'incendie, les événements dans n'importe quel ordre qu'il choisit.
.bind
: "S'il y a plusieurs gestionnaires inscrits, ils seront toujours exécuter dans l'ordre dans lequel ils ont été tenus." api.jquery.com/bindVous pouvez utiliser
onmousedown
sur l'élément.click
un élément qui n'impliquent pas de la souris.