2009-08-13 9 views
13

Je viens de commencer à utiliser JQuery dans VS 2008, et jusqu'à présent je l'aime! Mais, je suis confus sur la façon dont je devrais utiliser JQuery afin de sélectionner les contrôles asp.net sur une page Web.Sélection par attribut ID à l'aide de JQuery dans ASP.NET

Par exemple, j'ai le code suivant (juste un de maquette):

<asp:textbox id="txtSomeData1" runat="server" text="Some Data!!"></textbox> 

Maintenant, si je veux utiliser JQuery pour sélectionner la zone de texte et le modifier est le texte à « quelques chiffres !! », alors je dois faire quelque chose comme:

$('input#ctl00_ContentPlaceHolder1_txtSomeData1').val('Some More Data!!'); 

qui, très franchement, est ennuyeux parce que je ne veux pas gâcher d'avoir à comprendre ce que l'ID du contrôle est une fois qu'il est rendu à la page Web (ctl00_ContextPlaceHolder ... bla bla bla).

Y at-il un moyen que je peux sélectionner la zone de texte sans avoir à utiliser l'ID de celui-ci? En outre, je sais que vous pouvez sélectionner par nom de classe, mais cela n'aide pas beaucoup si le contrôle que vous sélectionnez n'a pas de classe.

Est-ce qu'il me manque quelque chose ici?

JUSTE DE RÉITERER: Je ne veux pas utiliser une classe pour sélectionner l'étiquette d'entrée !! Je voudrais utiliser l'id "txtSomeData1" et non l'identifiant long qui est rendu à la page Web.

+0

Si vous devez modifier l'ID de l'élément dans la page générée, vous devez modifier la sortie du côté ASP. C'est donc plus une question d'ASP qu'une question de jquery. – airportyh

+0

Fait une modification au titre en conséquence. – Jagd

Répondre

14

Qu'est-ce que vous voulez faire est soit:

$("input[id$='_txtSomeData1']").val()..... 

ou vous pouvez ajouter un attribut de classe ou sur mesure pour la zone de texte que vous pouvez sélectionner sur

+0

nice one jaimedp. +1 –

+0

Je n'arrive pas à faire marcher ça, mais je pense que c'est ce que je cherche! Je n'ai pas encore essayé l'attribut personnalisé. Est-ce que le $ = correspond à un caractère générique? – Jagd

+0

C'est exactement ce que j'ai essayé: $ ("input [id $ = '_ txtSomeData1'"). Val ('Encore plus de données !!'); – Jagd

1

Ceci est une grande plainte de la communauté avec ASP Formulaires Web .Net Dans ASP.Net 4.0, vous récupérez le contrôle de vos ID, c'est comme si vous l'écriviez en HTML brut. Sinon, sans .Net 4.0, vous pouvez utiliser ASP.Net MVC qui, pour la plupart, n'utilise pas les contrôles serveur, donc vous n'auriez pas le problème. Mais, comme le dit Harry, Harry ajoute que l'ajout d'une classe peut être ce que vous voulez si vous travaillez avec des formulaires Web et jQuery.

+0

Génial! Je ne savais pas que 4.0 n'aura pas l'id ennuyeux à viser avec. Ce sont de bonnes nouvelles. – Jagd

0

Vous pouvez ajouter des classes 'marker' à n'importe quel contrôle dont le seul but est d'être utilisé dans un sélecteur jQuery. Ce, ainsi que la navigation sur le heirarchy des arbres (quelque chose comme "$(element).children('.myClass').show()" pourrait être une bonne façon de le faire sans ID.

BTW, http://visualjquery.com/ est une excellente façon de voir les API jQuery etc.

+0

VisualJquery est génial. Si seulement ils le mettraient à jour à la version actuelle qui est sortie depuis 6 mois maintenant ... – phairoh

0

Vous pouvez utiliser le La notation element [id $ = Identifiant], qui cherche l'identifiant se terminant par le texte que vous spécifiez (c'est l'ID spécifié dans le balisage ASPX) Voici un exemple illustrant comment vous pouvez l'utiliser (voir la diapositive # 30): Building intranet applications with ASP.NET AJAX and jQuery.

7

si le javascript est sur le même.fichier ASPX, vous pouvez le faire:

$('<%= txtSomeData1.ClientID %>').val('Some More Data!!'); 
+0

Le javascript est dans son propre fichier (c'est-à-dire - non-envahissant). Mais comme je l'ai dit à Vdex, c'est une solution très attrayante et facile à utiliser; cependant, pas celui que je cherche. – Jagd

+0

En fait, ce serait $ ('# <% = txtSomeData1.ClientID%>'). Val ('Encore plus de données !!'); (Notez le signe # - c'est quelque chose que je m'oublie parfois) –

+1

une technique que j'ai utilisée est de mapper les composants de l'écran aux objets javascript; sur le fichier .aspx vous pouvez faire juste le mapping (ID d'élément à la propriété), alors vous pouvez utiliser ces objets sur les fichiers .js – BlackTigerX

1

Si vous allez externalisent le JavaScript à ses propres .js fichier, vous êtes coincé avec soit le codage en dur dans l'identifiant (le plus efficace), une sélection d'expression régulière ou en utilisant la inefficace par le sélecteur de nom de classe.

Toutefois, si elle est dans le même fichier que le contrôle .NET, vous pouvez toujours utiliser $('<%=txtSomeData1.ClientID %>')

+0

J'ai le javascript dans un fichier js et je vais probablement le garder comme ça, mais Je dois admettre que votre solution a un certain attrait. – Jagd

0

S'il vous plaît utiliser la syntaxe suivante: $ (« [id * = txtSomeData1] ») pour référencer un contrôle asp

Questions connexes