7
votes

Comment remplacer un gestionnaire d'événements JQuery précédemment défini?

Dans mon code, un gestionnaire d'événements pour un élément est défini qui modifie la hauteur CSS de l'élément à 100px. A ailleurs, je veux que un gestionnaire d'événements différent soit exécuté si certaines conditions se rencontrent, ce qui devrait remplacer le gestionnaire d'événements précédent et changer sa hauteur à 200 px.

Y a-t-il un moyen de le faire ou d'effacer tous les gestionnaires d'événements précédemment définis pour un élément?


1 commentaires

Vous pouvez vérifier les conditions à l'intérieur du gestionnaire d'événements, non?


3 Réponses :


19
votes

Oui, utilisez simplement .off () , comme xxx


1 commentaires

Agréable! Bon travail haha



4
votes

C'est un peu un piratage, mais on dirait que vous essayez de pirater le code de quelqu'un d'autre sans la possibilité de la modifier directement afin que ce soit ce que vous devez recourir à.

Si vous avez juste besoin de appeler quelque chose après leur document.Ready () code> et que vous ne contrôlez pas l'ordre du document .Ready () code>, vous pouvez mettre un code dans un court terme Timeout comme celui-ci à l'intérieur de votre document.Ready Handler: P>

$(document).ready(function() {
    setTimeout(function() {
        $('selector').off('eventname').on(your event handler here);
    }, 1);
});


7 commentaires

Y a-t-il un code pour vérifier si des événements ont été définis pour l'élément donné ou non. Donc, je pouvais faire: si ($ (ele) .hashadler ("cliquez sur") / * Evénement effacé / * Sinon Settimeout (ceci, 1000); pour vous assurer que l'événement a été défini Avant que ma fonction soit appelée


@ClickUPVote - Il n'y a pas besoin de vérifier en premier. Retirez simplement les gestionnaires appliqués précédemment, puis attachez la vôtre. S'il n'y en avait pas, supprimer ne fera que rien. FYI, cela ne fonctionne que pour les gestionnaires d'événements appliqués JQuery, pas des gestionnaires appliqués JavaScript simples.


À droite, mais si je pouvais vérifier avant de retirer, cela fonctionnerait plus de manière fiable, E.g Vérifiez si l'événement est défini, si oui, supprimez et définissez NOUVEAU, sinon, vérifiez 1 sec ultérieur, répétez


À moins que l'autre code établisse également le gestionnaire d'événements sur une minuterie (auquel cas vous faites maintenant un piratage), il n'est pas nécessaire de contrôler plusieurs chèques / minuteries. Si c'est défini sur document.Ready, votre minuterie définie de document.Ready sera après tous les gestionnaires de documents.Ready.


Pouvez-vous simplement répondre à la question? :)


@ClickUPVote - Je ne connais pas la réponse. Quelque part enterré à JQuery est un moyen d'obtenir chez d'autres gestionnaires d'événements JQuery, mais je ne le connais pas personnellement. Vous devrez le trouver. Ma recommandation est que ce n'est pas nécessaire et il existe probablement un moyen beaucoup plus propre de résoudre le problème, mais vous n'avez pas divulgué une grande partie du problème et que vous avez déjà sélectionné une meilleure réponse, donc apparemment, votre question initiale est déjà répondu à votre satisfaction.


@ClickUPVote: Vous pouvez le faire en utilisant quelque chose comme ceci: jsfiddle.net/zerkms/7w5xk Source JQuery Référence: Github.com/jquery/jquerery/blob/master/ src / événement.js # l20



2
votes

Autre moyen: xxx

charge est exécuté après le document prêt


0 commentaires