Je suis lie un événement click d’un bouton :
Dans un scénario, c’est obtenir appelé plusieurs fois, alors quand je fais un `` je vois plusieurs appels ajax que je veux éviter.
Comment faire pour `` seulement si ce n’est pas lié à l’avant.
Je suis lie un événement click d’un bouton :
Dans un scénario, c’est obtenir appelé plusieurs fois, alors quand je fais un `` je vois plusieurs appels ajax que je veux éviter.
Comment faire pour `` seulement si ce n’est pas lié à l’avant.
jQuery événements sont stockés dans un objet de données appelés events
, de sorte que vous pourriez chercher dans ce:
var button = $('#myButton');
if (-1 !== $.inArray(onButtonClicked, button.data('events').click) {
button.click(onButtonClicked);
}
Il serait mieux, bien sûr, si vous pouviez la structure de votre application, de sorte que ce code n'est appelé qu'une fois.
Cela pourrait être encapsulé dans un plugin:
$.fn.isBound = function(type, fn) {
var data = this.data('events')[type];
if (data === undefined || data.length === 0) {
return false;
}
return (-1 !== $.inArray(fn, data));
};
Vous pouvez ensuite appeler:
var button = $('#myButton');
if (!button.isBound('click', onButtonClicked)) {
button.click(onButtonClicked);
}
Mise à jour 24 Août '12: jQuery 1.8, il n'est plus possible d'accéder à l'élément événements à l'aide de .data('events')
. (Voir ce bug pour plus de détails.) Il est possible d'accéder aux mêmes données avec jQuery._data(elem, 'events')
, une structure de données interne, qui est sans papiers et n'est donc pas garanti à 100% rester stable. Cela ne devrait pas, cependant, d'être un problème, et la ligne du plugin code ci-dessus peut être modifié à la suivante:
var data = jQuery._data(this[0], 'events')[type];
La meilleure façon que je vois est d’utiliser live() ou delegate() pour capturer l’événement chez un parent et non pas dans chaque élément enfant.
Si votre bouton est à l’intérieur d’un élément de #parent, vous pouvez remplacer :
``
par
``
même si #myButton n’existe pas encore lorsque ce code est exécuté.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.