jQuery: Obtenir une référence à l'événement de clic et de déclencher plus tard?
Je veux enrouler un existant, cliquez sur l'événement dans un certain code supplémentaire.
Fondamentalement, j'ai un multi cadre en forme d'un accordéon et je veux déclencher la validation de l'accordéon cliquez sur l'en-tête. L'accordéon code est utilisé ailleurs et je ne veux pas le changer.
Voici ce que j'ai essayé:
//Take the click events off the accordion elements and wrap them to trigger validation
$('.accordion h1').each(function (index, value) {
var currentAccordion = $(value);
//Get reference to original click
var originalClick = currentAccordion.click;
//unbind original click
currentAccordion.unbind('click');
//bind new event
currentAccordion.click(function () {
//Trigger validation
if ($('#aspnetForm').valid()) {
current = parseInt($(this).next().find('.calculate-step').attr('data-step'));
//Call original click.
originalClick();
}
});
});
jQuery déclenche une erreur parce qu'il essaie de faire this.trigger
à l'intérieur de la originalClick
fonction et je ne pense pas que this
est ce que jQuery s'attend à le trouver.
EDIT: mise à Jour du code. Cela fonctionne, mais il est un peu moche!
//Take the click events off the accordion elements and wrap them to trigger validation
$('.accordion h1').each(function (index, value) {
var currentAccordion = $(value);
var originalClick = currentAccordion.data("events")['click'][0].handler;
currentAccordion.unbind('click');
currentAccordion.click(function (e) {
if ($('#aspnetForm').valid()) {
current = parseInt($(this).next().find('.calculate-step').attr('data-step'));
$.proxy(originalClick, currentAccordion)(e);
}
});
});
Pourriez-vous utiliser
Je pense que ce sera le déclencheur de mon nouvel événement attaché?
Oui désolé, je n'avais pas totalement compris ce que vous essayiez de le faire.
$(currentAccordion).trigger('click');
et de ne pas enregistrer une référence à l'événement?Je pense que ce sera le déclencheur de mon nouvel événement attaché?
Oui désolé, je n'avais pas totalement compris ce que vous essayiez de le faire.
OriginalL'auteur Rob Stevenson-Leggett | 2011-10-13
Vous devez vous connecter pour publier un commentaire.
Je pense que c':
N'est pas en train de faire ce que vous pensez - vous capturez une référence à l'jQuery cliquez sur la fonction, plutôt que de gestionnaire d'événement que vous avez ajouté, de sorte que lorsque vous appelez originalClick() c'est équivalent à: $(valeur).cliquez sur()
Vous pouvez peut-être faire à l'aide d'currentAccordian.de données("événements") - il vous donne en retour la liste des événements qui y sont gestionnaires et les gestionnaires, mais je ne me souviens pas exactement de la même façon qui fonctionne.
Essayez ceci: Comment trouver des écouteurs d'événement sur un nœud DOM?
Cheers, entre vous et Steve il y a une solution de travail, mais c'est un peu moche 🙂
OriginalL'auteur gb.
Je suis enfin arrivé à quelque chose de fiable:
Cela peut sembler un peu bizarre (pourquoi ne nous stockons les événements de clic dans la variable "y"?)
À l'origine, j'ai essayé d'exécuter les gestionnaires dans x.cliquez sur, mais ils semblent être détruit lors de notre appel .off("clic"). La création d'une copie de l'gestionnaires dans une autre variable "y" a travaillé. Désolé je n'ai pas une explication détaillée, mais je crois que l' .off("clic") méthode supprime l'événement click de notre document, avec les maîtres-chiens.
http://www.frankforte.ca/blog/32/unbind-a-click-event-store-it-and-re-add-the-event-later-with-jquery/
<a onclick="something()">do something</a>
séparément par l'accaparement desvar inline_click = this.onclick
puis de vérifier, pour inline_click après la boucle for et en l'exécutantif(inline_click){ inline_click(); }
OriginalL'auteur Frank Forte
Je ne suis pas un utilisateur jQuery, mais en Javascript, vous pouvez définir le contexte de la ce mot-clé.
En jQuery, vous utilisez le $.proxy() méthode pour ce faire.
Personnellement, je regarderais la création de rappel crochets dans votre Accordéon, ou de faire utiliser les callbacks (si elles existent) qui se déclenchent lors de l'ouverture ou de la fermeture d'un volet accordéon.
Espère que cela aide 🙂
OriginalL'auteur Steven Bakhtiari
currentAccordion.cliquez sur une fonction jQuery, et non l'événement lui-même.
De départ avec une force brute approche, ce que vous devez faire c'est:
Cela ressemble à un travail pour un filtre d'événement plugin, mais je ne pouvais pas en trouver un. Si ce dernier point n'est pas nécessaire dans votre application, alors il est un peu plus simple.
Edit: Après quelques recherches, le
bindIf
fonction montré ici ressemble à ce que vous auriez besoin (ou au moins, donner une direction générale)OriginalL'auteur abesto