Je travaille sur la création dynamique de JavaScript qui sera inséré dans une page Web au fur et à mesure de sa construction.
Le JavaScript sera utilisé pour remplir un en listbox
fonction de la sélection dans un autre listbox
. Lorsque la sélection de l'un listbox
est modifiée, il appellera un nom de méthode basé sur la valeur sélectionnée dulistbox
.
Par exemple:
Listbox1
contient:
Colours
Shapes
Si Colours
est sélectionné, il appellera une populate_Colours
méthode qui en remplit une autrelistbox
.
Pour clarifier ma question: comment passer cet populate_Colours
appel en JavaScript?
javascript
dynamic
methods
Chris B
la source
la source
Réponses:
En supposant que la
populate_Colours
méthode se trouve dans l'espace de noms global, vous pouvez utiliser le code suivant, qui exploite à la fois le fait que toutes les propriétés de l'objet sont accessibles comme si l'objet était un tableau associatif et que tous les objets globaux sont en fait des propriétés de l'window
objet hôte.la source
$.fn[method_prefix + method_name](arg1, arg2);
try
/catch
.$(function () {
etwindow.load
:)Comme le souligne Triptych, vous pouvez appeler n'importe quelle fonction de portée globale en la trouvant dans le contenu de l'objet hôte.
Une méthode plus propre, qui pollue beaucoup moins l'espace de noms global, consiste à placer explicitement les fonctions dans un tableau directement comme ceci:
Ce tableau peut également être une propriété d'un objet autre que l'objet hôte global, ce qui signifie que vous pouvez créer efficacement votre propre espace de noms comme le font de nombreuses bibliothèques JS telles que jQuery. Ceci est utile pour réduire les conflits si / lorsque vous incluez plusieurs bibliothèques d'utilitaires distinctes dans la même page, et (si d'autres parties de votre conception le permettent) peut faciliter la réutilisation du code dans d'autres pages.
Vous pouvez également utiliser un objet comme celui-ci, que vous pourriez trouver plus propre:
Notez qu'avec un tableau ou un objet, vous pouvez utiliser soit la méthode de paramétrage, soit l'accès aux fonctions, et vous pouvez bien sûr y stocker d'autres objets. Vous pouvez réduire davantage la syntaxe de l'une ou l'autre méthode pour un contenu qui n'est pas aussi dynamique en utilisant la notation littérale JS comme suit:
Edit: bien sûr, pour des blocs de fonctionnalités plus volumineux, vous pouvez étendre ce qui précède au "modèle de module" très courant qui est une manière populaire d'encapsuler les fonctionnalités du code de manière organisée.
la source
var dyn_functions = {};
que vous ne créez pas inutilement un tableau ... ce n'est pas un gros problème cependant.Je recommanderais de NE PAS utiliser
global
/window
/eval
à cette fin.Au lieu de cela, faites-le de cette façon:
définir toutes les méthodes comme propriétés de Handler:
Maintenant appelle ça comme ça
Sortie: jerry
la source
vous pouvez le faire comme ceci:
la source
Dans un
ServiceWorker
ouWorker
, remplacezwindow
parself
:Les ouvriers n'ont pas accès au DOM, c'est donc
window
une référence invalide. L'identifiant global de portée équivalent à cet effet estself
.la source
Je ne recommanderais pas d'utiliser la fenêtre comme le suggèrent certaines des autres réponses. Utilisez
this
et portez en conséquence.Une autre astuce consiste à appeler dans différentes portées et à l'utiliser pour l'héritage. Disons que vous avez imbriqué la fonction et que vous souhaitez accéder à l'objet de fenêtre global. Vous pouvez faire ceci:
la source
Salut essayez ça,
il gérera les paramètres lui-même.
la source
functionName
... le répondant a fait l'hypothèse que vous aviez déjà défini cela.Voici une solution simple et fonctionnelle pour vérifier l' existence d'une fonction et trier cette fonction dynamiquement par une autre fonction;
Fonction de déclenchement
et vous pouvez maintenant générer la fonction dynamiquement peut-être en utilisant php comme ça
maintenant vous pouvez appeler la fonction en utilisant un événement généré dynamiquement
le code HTML exact dont vous avez besoin est
la source
Essayez avec ceci:
la source
eval
fonction avait des effets secondaires bizarres liés à son utilisation. J'essaie généralement de m'en éloigner, à moins que ce ne soit un dernier recours.