2010-09-21 9 views
0

bonnes personnes après-midi pourPassant une fonction JQuery/Javascript

J'ai construit un plugin jquery que j'utilise sur mon site. Le plugin est pour les boîtes d'entrée suggestives et fonctionne bien. Une chose que j'ai besoin d'ajouter est la capacité de passer une fonction dans sa config à appliquer à la réponse de l'appel ajax qui est faite pour le suggestif. Je ne peux rien trouver sur le vieux google fidèle sur comment passer des fonctions et les ai appliquées dans le cadre du plugin ..

J'ai besoin de ceci parce que quelques réponses mettent à jour un champ et une certaine mise à jour 2 ou plusieurs champs avec le texte différent tenu dans la réponse et je ne veux pas continuer à dupliquer le plugin permettant que cela se produise. Je suppose que la méthode javascript "appliquer" est ce que j'ai besoin de regarder, mais je suis totalement confus

Est-ce que cela a même du sens sur ce que j'essaie de faire? et si oui, quelqu'un peut-il m'aider ou me diriger dans la bonne direction?

Merci à l'avance

Alex

+1

Quelque chose comme ceci: http: // stackoverflow.com/questions/483073/obtenir-mieux-comprendre-de-callback-fonctions-en-javascript? – kamasheto

+5

Ne sait pas sur la réponse, mais suggère d'utiliser le mot prédictif plutôt que suggestif. Suggestive boîtes de saisie pourraient être prises pour être un peu lubrique ... :) – Paddy

+0

content que je pourrais aider. Assurez-vous d'utiliser la fonctionnalité de recherche avant de demander à l'avenir :) – kamasheto

Répondre

2

Vous recherchez .call() ou .apply(). Vous pouvez passer le contexte (c'est-à-dire la portée) comme premier paramètre aux deux. .call() fonctionne comme ceci:

yourCallback.call(this, param1, param2); 

Alors que .apply() fonctionne comme ceci:

yourCallback.apply(this, [param1, param2]); 

.apply() est très utile lors de la génération des paramètres dynamiquement.

1

Je vous recommande de profiter du merveilleux travail accompli par l'équipe jQuery UI. L'API est très bien pensée et devrait vous donner tout ce dont vous avez besoin.

http://docs.jquery.com/UI/Autocomplete

+0

@ maskr .. parfait merci – Alex

+0

@ paddy .. qui se soucie de mes conventions de nommage - seulement je dois les utiliser - merci pour l'entrée de toute façon;) – Alex

+0

Chaos. .. Je trouve que l'interface utilisateur de jQuery est très gonflée pour ce dont j'ai besoin, j'ai créé une fonction plus performante qui peut très bien évoluer en 15 lignes par opposition à leur grande alternative. Y compris même un de leurs plugins prend mon score de vitesse de page de 98/100 à 86 pour ne pas mentionner le temps qu'il faut au chargement de la page avec tous les différents CSS et JS nécessaires. Merci pour l'entrée si – Alex

1

Javascript a des fermetures. Si vous définissez une fonction comme celle-ci:

{ 
    var a; 

    function myFn() { 
     b = a; // a is set 
    } 

    $('.c').autocomplete({callback: myFn}); 
    ... 

Ceci est généralement suffisant pour gérer ce cas. Dans votre code d'installation, incluez des références à ce dont vous avez besoin en tant que variables locales, et elles existeront même si la fonction elle-même sort du contexte. C'est un peu bizarre pour les gens qui n'y sont pas habitués, mais puissant et utile.

Certains plugins fournissent des variables de "contexte" que vous pouvez définir, et vous seront renvoyés explicitement dans votre callback. Vérifiez les documents pour voir si ceux-ci existent.

Enfin, vous pouvez utiliser apply pour modifier le this avec lequel votre fonction est appelée. Les fonctions en Javascript sont (en général) des entités autonomes, et une seule fonction peut être appelée avec this définie sur n'importe quel type de valeur. Dans le cas du callback, il est parfois nécessaire d'enrouler un callback donné et de l'appeler dans le bon contexte. Cela ressemble à myFn.apply(newThis, params). Vous êtes en train de caler la fonction apply sur l'objet fonction et en lui fournissant son contexte et ses paramètres.

Espérons que cela aide.

+0

Merci pour tous les gars ... @ maskr répondu, mais je peux; t marquer son commentaire car il répond au problème, donc "insaisissable" obtiendra les poitns! – Alex

Questions connexes