Jquery ne fonctionne qu’une fois par chargement de page – vous voulez qu’il fonctionne plus d’une fois sans avoir à recharger la page

Je souhaite pouvoir exécuter ce script plusieurs fois sans recharger la page. J’ai regardé en utilisant les événements en direct, mais je ne pouvais pas le comprendre. Toute aide serait grandement appréciée. Btw, je suis un noob et je n’ai pas écrit le script moi-même.

 var $elem = $('#wrapper'); $(document).ready(function(){ $("a#sortinggger").click(function(event){ event.preventDefault(); var full_url = this.href; var parts = full_url.split("#"); var trgt = parts[1]; var target_offset = $("#"+trgt).offset(); var target_top = target_offset.top; $('html, body').delay(2000).animate({scrollTop:target_top}, 2000).delay(250).queue(function() { $('#arm').hide(); $('#arm').toggleClass('arm-down'); }); }); $(function(){ $('#arm').hide(); $('#arm').toggleClass('arm-down'); $('a#sortinggger').click(function() { $('#sortinggger').addClass('active'); $('#arm').delay(500).slideToggle().delay(750).queue(function() { $('#arm').toggleClass('arm-grab'); }); }); }); });  

Supposons que vous ne voulez pas définir le gestionnaire de clics plusieurs fois. Cela laisse juste la fonction anonoymous.

Étape 1.! Anonyme

Modifiez la fonction anonyme en une fonction non anonyme.

 function blammo(sortingggeringEvent) { $('#arm').hide(); $('#arm').toggleClass('arm-down'); $('a#sortinggger').click(function() { $('#sortinggger').addClass('active'); $('#arm').delay(500).slideToggle().delay(750).queue(function() { $('#arm').toggleClass('arm-grab'); }); }); } 

Étape 2. allez blammo

Utilisez la fonction non anonyme et la fonction jQuery .on() .

 $(document).ready(function() { ... blah ... blammo(null); // instead of the anonymous function. $(something).on("some event, maybe click", blammo); } 

Faites votre fonction anonyme:

 function(event){ event.preventDefault(); var full_url = this.href; var parts = full_url.split("#"); var trgt = parts[1]; var target_offset = $("#"+trgt).offset(); var target_top = target_offset.top; $('html, body').delay(2000).animate({scrollTop:target_top}, 2000).delay(250).queue(function() { $('#arm').hide(); $('#arm').toggleClass('arm-down'); }); }); $(function(){ $('#arm').hide(); $('#arm').toggleClass('arm-down'); $('a#sortinggger').click(function() { $('#sortinggger').addClass('active'); $('#arm').delay(500).slideToggle().delay(750).queue(function() { $('#arm').toggleClass('arm-grab'); }); }); }); } 

dans une fonction

function yourFunction(event)

ce qui réduit votre onLoad à

$(document).ready(yourFunction)

maintenant, vous pouvez appeler votre fonction quand vous le souhaitez

  

Si vous voulez qu’un morceau de js s’exécute plus d’une fois, mettez le tout dans une fonction, puis utilisez setTimeOut() pour l’appeler.

Je n’ai aucune idée de ce qui se passe ici, mais je vais essayer quand même 🙂