Question

J'ai créé un contrôle Web en ASP pour l'intégration avec Telligent CommunityServer. Le contrôle est écrit en ASP avec quelques 10 lignes de C # back-end pour contrôler la visibilité des éléments de l'interface utilisateur en fonction des autorisations, mais je dirais que 90% de la fonctionnalité

est straight-up Javascript.

Le contrôle fonctionne à merveille, jusqu'à ce que vous laissez tomber deux instances du contrôle sur la même page -. Car ils font référence à exactement les mêmes fonctions Javascript, seulement une des œuvres de commande

Comment puis-je prendre cette fonctionnalité que j'ai, 1200 lignes de Javascript, et faire en sorte que chaque instance du contrôle peut faire référence à sa chaque instance unique de Javascript?

Était-ce utile?

La solution

Si le problème est simplement de trouver sur quel élément HTML déclenché un événement alors c'est facile - il vous est passé dans les arguments de l'événement. (Vous pouvez alors obtenir son élément parent, bien sûr.) Donc, si je comprends le problème correctement des fonctions JavaScript référencement des contrôles, qui obtiennent dupliquée?

Je ne pense pas qu'il y ait une solution magique ici: il vous suffit de rendre l'ID unique. Si vous n'êtes pas en utilisant les contrôles côté serveur (qui gèrent automatiquement pour vous), vous pouvez utiliser un serveur côté généré préfixe ou un suffixe, par exemple.

<input id="<%= ParentControlId %>_mytextbox" type="text" />

ParentControlId est un identifiant unique du contrôle parent (vous pouvez simplement utiliser Control.ID si cela ne vous dérange pas d'ID longs).

Bien sûr, vous devriez essayer de réutiliser vos fonctions plutôt que de les dupliquer pour chaque instance de contrôle JavaScript. Si vous utilisez l'approche ID généré par le serveur, vous devrez passer les ID entiers autour. Si vous utilisez l'approche de préfixe, vous pouvez simplement passer autour du préfixe.

Autres conseils

Comment votre contrôle obtenir le code JavaScript dans la page, alors? Directement injecter? Utilisez-vous un ScriptReference? Le navigateur ne charge la JS fois si les deux contrôles référencés même JS (même URL).

En outre, votre JS écrit en termes de toute ancienne instance? par exemple. vous avez la fonction comme charge (oControlName) ou fait la fonction Load () ont un nom d'instance codée en dur à l'intérieur?

OMI, en essayant d'obtenir de multiples « JavaScripts » est pas la voie à suivre -. Refactorisation votre code peut obtenir votre réponse plus rapide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top