J'ai le code suivant:
function someMethod()
{
$(obj).click(function {});
}
someMethod est appelé deux fois et l'événement click est donc lié deux fois. Comment puis-je le lier une seule fois?
J'ai le code suivant:
function someMethod()
{
$(obj).click(function {});
}
someMethod est appelé deux fois et l'événement click est donc lié deux fois. Comment puis-je le lier une seule fois?
si vous pouvez l'appliquer, vous voudrez probablement jeter un coup d'œil à event.preventDefaultt et à event.stopPropagation OU à annuler la liaison et la liaison à chaque fois, dans la méthode
function someMethod()
{
$(obj).off('click').on('click', function {});
}
Il n'y a pas de méthode intégrée pour déterminer si vous avez déjà lié cette fonction particulière. Vous pouvez lier plusieurs fonctions de clic à un objet. Par exemple:
$('#id').bind('click', function(){
alert('hello');
});
$('#id').bind('click', function(){
alert('goodbuy');
});
si vous faites ce qui précède lorsque vous cliquez sur l'objet, il vous alerte bonjour alors au revoir. Pour vous assurer qu'une seule fonction est liée à l'événement click, dissociez le gestionnaire d'événements click, puis liez la fonction souhaitée de la manière suivante:
$(obj).unbind('click').bind('click', function(){... });
La solution évidente est de ne pas appeler someMethod()
deux fois. Si vous ne pouvez pas corriger cela, alors vous pouvez garder une variable d'état donc il ne se lie jamais une seule fois, comme ceci:
function someMethod()
{
if (!someMethod.bound) {
$(obj).click(function() {});
someMethod.bound = true;
}
}
Remarque: cette méthode utilise une propriété de la fonction elle-même plutôt que de l'introduction d'une variable globale pour garder une trace de savoir si c'est lié. Vous pouvez également utiliser une propriété sur l'objet lui-même.
Vous pouvez la voir à l'œuvre ici: http://jsfiddle.net/jfriend00/VHkxu/.
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.