2013-03-08 3 views
0

J'ai une fonction que je veux arrêter lorsque j'exécute un événement click 'close'.Fonction Kill après un événement click JavaScript

Le raisonnement derrière ceci est lorsque je cours img.start événement de clic pour la deuxième fois, la fonction est appelée à nouveau et est maintenant en cours d'exécution deux fois.

La fonction en question est un diaporama, donc j'ai vraiment besoin que la fonction ne soit jamais exécutée qu'une seule fois sur une page. Pour être clair, lorsque je clique sur img.close, je veux que la fonction BannerSlideshow s'arrête et ne fonctionne plus.

fonction démarrage, cliquez sur événement

$('img.start').click(function() { 
    BannerSlideshow.Init() 
}); 

événement click fonction Fin

$('img.close').click(function() { 
    //stop function BannerSlideshow from running 
}); 

Snippet de la fonction diaporama

var BannerSlideshow = (function() { 
return { 
    Init: function() { 
     //slideshow functionality    
    } 

J'ai mis à jour ma question pour être plus précis, excuses les gars.

Répondre

1

vous pouvez le faire en utilisant bind() et unbind()

$('img.close').bind('click',function() { 
     // your code 
    $(this).unbind('click'); 
}); 

OU

Vous pouvez utiliser Off()

$(this).off('click'); 
+0

'$ (« img.close ») se lient 'vous avez manqué le' .' dans '.bind' – dakait

+0

De [les docs] (http://api.jquery.com/bind/):" Depuis jQuery 1.7, la méthode .on() est la méthode préférée pour attacher des gestionnaires d'événements à un document. " Ce n'est pas un nouveau changement, 1.7 a été publié il y a des mois. –

+1

@AnthonyGrist: Bien que vous ayez raison, il est plus important d'utiliser 'on()' à la place des méthodes obsolètes telles que 'live()' comme elles sont passées en 1.9.1. 'bind' n'a pas encore été déprécié et est encore une utilisation valide à ce moment-là. En outre, comme toutes les autres méthodes de liaison, il utilise de toute façon 'on()' dans les coulisses. – Nope

0

vous pouvez utiliser la méthode off. Off()

(A partir de jQuery 1.7, le .on() et .off() sont préférés à installer et à enlever les gestionnaires d'événements sur les éléments

$('img.close').off('click'); 
0

Pourquoi ne pas utiliser la fonction d'arrêt avec un booléen?

var running = false; 

$('img.close').click(function() { 
    running = true; 

});

en cas d'exécution = true, fonction d'arrêt d'utilisation() sinon lancer le diaporama

Je pense que la fonction d'arrêt est mieux que de délier les gestionnaires

0

Qu'est-ce que le regard de la fonction StartSlideshow comme? Je suppose que vous pourriez avoir une variable globale pour lancer le diaporama ou non ...

function StartSlideshow() { 
    globalVariableRunSlideshow = true; 
    while (globalVariableRunSlideshow) { 
     /* Do some slideshowing here */ 
    } 
} 

Et votre événement pourrait faire quelque chose comme:.

$('img.close').click(function() { 
    globalVariableRunSlideshow = false; 
}); 
Questions connexes