0

J'utilise le script jQuery throttle-debounce de Ben Alman et je continue de courir dans un TypeError Uncaught quand il est déclenché.jQuery Throttle - Debounce | callback.apply n'est pas une fonction

Il faut dire aussi que j'utilise Twitter Bootstrap comme framework pour la conception responsive, ET que j'ai aussi quelques CarouFredSels synchronisés sur la page.

L'erreur que je reçois est la suivante: Uncaught TypeError: callback.apply est pas une fonction jquery.ba-papillon-debounce.js: 149

Je regarde la ligne 149, ce qui est le domaine de la intérêt:

function wrapper() { 
     var that = this, 
     elapsed = +new Date() - last_exec, 
     args = arguments; 

     function exec() { 
     last_exec = +new Date(); 
     callback.apply(that, args); //LINE 149// 
     }; 

     function clear() { 
     timeout_id = undefined; 
     }; 

     if (debounce_mode && !timeout_id) { 
     exec(); 
     } 

     timeout_id && clearTimeout(timeout_id); 

     if (debounce_mode === undefined && elapsed > delay) { 
     exec(); 

     } else if (no_trailing !== true) { 
     timeout_id = setTimeout(debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay); 
     } 
    }; 

Je ne suis pas vraiment au courant de ce script, car il était en place avant on m'a demandé de prendre le relais. Le script d'accélération est déclenché lorsque l'utilisateur clique dans un champ de recherche qui fait basculer un script "auto-complet" à implémenter ultérieurement.

JFIDDLE

+0

Si vous allez ajouter un violon, il doit «travailler» (comme dans montrer votre erreur) sinon c'est plutôt inutile. – Jamiec

+0

jfiddle "travaille" maintenant. – Murphy1976

+0

'Erreur: JavaScript de Bootstrap nécessite jQuery' - votre violon n'inclut même pas la version de jquery sur laquelle vous êtes. – Jamiec

Répondre

1

Vous devez permuter les paramètres.
Il est $.debounce(delay, callback) et non $.debounce(callback, delay)


jQuery.debounce

Debounce exécution d'une fonction. Le rebond, contrairement à la limitation, garantit qu'une fonction n'est exécutée qu'une seule fois, soit au tout début d'une série d'appels, soit à la toute fin. Si vous souhaitez simplement limiter l'exécution d'une fonction, consultez la méthode jQuery.throttle.

Utilisation

var debounced = jQuery.debounce(delay, [ at_begin, ] callback); 

jQuery('selector').bind('someevent', debounced); 
jQuery('selector').unbind('someevent', debounced); 

Arguments

delay (Number)
A zéro ou plus grand retard en millisecondes. Pour les rappels d'événements, les valeurs autour de 100 ou 250 (ou même plus) sont les plus utiles.

at_begin (Boolean)
Facultatif, défini par défaut sur false. Si at_begin est faux ou non spécifié, le callback ne sera exécuté que delay millisecondes après le dernier appel de la fonction debounced. Si at_begin est true, callback sera exécuté uniquement lors du premier appel de fonction débattue. (Après la fonction d'étranglement n'a pas été appelé pour delay millisecondes, le compteur est remis à zéro interne)

callback (Function)
Une fonction à exécuter après millisecondes de retard. Le contexte this et tous les arguments sont transmis, tels quels, à callback lorsque la fonction debounced est exécutée.

+0

merci beaucoup ... Je le regardais si fort, que je n'ai même pas remarqué que les arguments étaient retournés. – Murphy1976