Obtenir clientid dans le contrôle de l'utilisateur du fichier javascript externe
Je suis en train d'établir un contrôle de l'utilisateur (ascx) ASP.NET qui utilise javascript pour la manipulation des commandes. Actuellement, le code javascript est incorporé et utilise <%= somecontrol.ClientID %>
à obtenir le contrôle dont il a besoin.
Je veux mettre le fichier javascript dans un fichier externe, mais à partir d'un fichier externe je ne peux pas utiliser la syntaxe ci-dessus pour la récupération des contrôles. J'ai lu sur les solutions possibles dans cette et cette réponses mais le problème est que le contrôle de l'utilisateur peut être placé à plusieurs reprises sur la page. Cela signifie que le tableau de Contrôles (mentionné dans les réponses) sera rendue plusieurs fois avec différents articles. En conséquence, le script ne sera pas en mesure de récupérer l'id dont il a besoin. Si j'ai mis <%= ClientId %>
dans le nom du tableau qui contient les éléments puis je vais avoir le même problème que j'essaye de résoudre.
Des idées?
OriginalL'auteur Giorgi | 2010-03-23
Vous devez vous connecter pour publier un commentaire.
Ok, une approche différente, que j'essaie d'utiliser un JavaScript-style de classe, puis l'initialiser pour chaque contrôle.
Dans le fichier javascript externe, écrire votre code comme:
Et sur le contrôle ne l'appeler comme ça.
Espère maintenant mieux.
Ok, désolé, mon anglais n'est pas super, je m'ennuie que je vais mettre à jour mon idée... ou supprimer pour l'instant et réfléchir à nouveau.
J'ai changer les idée!!!! Ce travail pour vous 🙂
OriginalL'auteur Aristos
La façon dont je résoudre ce problème est d'utiliser les classes CSS ou placer les contrôles à l'intérieur des récipients avec de l'connu Id puis traverser dans le conteneur des enfants pour obtenir des contrôles réels. Par exemple:
Pourrait être accessible via:
Ou:
Pourrait être accessible via:
Le seul vrai problème avec cette approche est que vous êtes à lier votre code de balisage spécifique sur la page, qui peut être un problème si le balisage change beaucoup de choses.
Je ne pense pas que c'est une bonne solution, comme si j'placer plusieurs commandes sur la même page, ils auront la même classe. Aussi la sélection d'un contrôle par classe est plus lent par rapport à l'id.
Vous pourrait rendre le "ControlContainer" parent de l'élément dans le contrôle de l'utilisateur, et de rendre son ID de quelque chose que vous spécifiez comme un attribut transmises à l'utilisateur le contrôle. De cette façon, il serait unique, par exemple sur la page. Puis le javascript appelle dans le contrôle peut passer que l'ID de conteneur pour les fonctions définies dans le fichier JS externe qui il pouvait utiliser pour sélectionner les contrôles spécifiques au sein de cette instance du conteneur. Vous avez raison que la sélection par classe est plus lent que la sélection par l'ID, mais la différence serait probablement être mesurée en fractions de millisecondes par opération.
OriginalL'auteur Rudism
À propos d'une variable cachée:
Puis, à partir de votre js:
Ou, mettre la table de hachage:
OriginalL'auteur James Wiseman
Si vous voulez trouver une spécifiques de contrôle quand il pourrait y avoir plusieurs exemplaires, ce ne peut pas être fait. Comment le javascript externe de savoir qui de la
n
contrôles que vous vouliez?Comment truquer le comportement jusqu'à une classe et de trouver les éléments par rapport à la position de l'action de contrôle, comme ceci:
UserControl:
Si vous jQuery a été écrit pour être de la famille, comme ceci:
Dans ce cas, il n'a pas d'importance ce que l'Id spécifiques sont, aussi longtemps que vous pouvez naviguer dans le DOM relativement aux contrôles dont vous avez besoin. Même si c'est plus complexe comme
.closest("div").next().find(".bob").prev()
...tout ce que vous avez besoin pour y arriver œuvres.D'où qu'il vienne, il se termine sur la page, assurez-vous d'enregistrer et de ne pas l'inclure à chaque fois avec le contrôle de l'utilisateur.
chaque utilisateur le contrôle et les contrôles à l'intérieur ont différentes clientids. Ce que je suis en train de réaliser, c'est que le code javascript traitées uniquement que le contrôle qui l'a inclus.
OriginalL'auteur Nick Craver