2009-08-13 12 views
13

Ho appena iniziato a utilizzare JQuery in VS 2008 e finora mi piace! Ma sono confuso su come dovrei usare JQuery per selezionare i controlli di asp.net su una pagina web.Selezione per attributo ID utilizzando JQuery in ASP.NET

Ad esempio, ho il seguente codice (solo un mock-up):

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

Ora, se voglio utilizzare JQuery per selezionare la casella di testo e modificare è il testo di "alcuni dati più !! ", quindi avrei dovuto fare qualcosa di simile:

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

che, francamente, è fastidioso perché io non voglio fare confusione con dover capire ciò che l'ID del controllo è dopo che è reso al pagina web (ctl00_ContextPlaceHolder ... blah blah blah).

C'è un modo per selezionare la casella di testo senza dover utilizzare l'id di esso? Inoltre, so che puoi selezionare per nome della classe, ma questo non aiuta molto se il controllo che stai selezionando non ha una classe.

Mi manca qualcosa qui?

SOLO PER REITERARE: non voglio usare una classe per selezionare il tag di input !! Vorrei usare l'id "txtSomeData1" e non l'ID lungo che viene reso alla pagina web.

+0

Se è necessario modificare l'ID dell'elemento nella pagina generata, è necessario modificare l'output sul lato asp. Quindi questa è più una domanda ASP che una domanda jquery. – airportyh

+0

Effettuate una modifica al titolo di conseguenza. – Jagd

risposta

14

Che cosa si vuole fare è o:

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

o si potrebbe aggiungere un attributo class o personalizzato per la casella di testo che è possibile selezionare il

+0

nice one jaimedp. +1 –

+0

Non riesco a farlo funzionare, ma penso che sia quello che sto cercando! Non ho ancora provato l'attributo personalizzato. $ = È una corrispondenza jolly? – Jagd

+0

Questo è esattamente quello che ho provato: $ ("input [id $ = '_ txtSomeData1'"). Val ('Some More Data !!'); – Jagd

1

Questo è un grande denuncia la comunità ha con ASP . Forme web .Net. In ASP.Net 4.0 ottieni il controllo dei tuoi ID, quindi è come se lo avessi scritto in HTML puro. In alternativa, con .Net 4.0, è possibile utilizzare ASP.Net MVC che, per la maggior parte, non utilizza i controlli del server, quindi non si avrebbe il problema.

Ma come dice happytime harry, aggiungere una classe può essere ciò che si desidera se si lavora con moduli Web e jQuery.

+0

Fantastico! Non sapevo che 4.0 non avrebbe gli ID fastidiosi da girare. Questa è una buona notizia. – Jagd

0

È possibile aggiungere classi "marker" a qualsiasi controllo il cui unico scopo è l'uso in un selettore jQuery. Che, insieme con la navigazione del gerarchia ad albero (qualcosa come "$(element).children('.myClass').show()" potrebbe essere un buon modo per farlo senza ID.

Btw, http://visualjquery.com/ è un ottimo modo per visualizzare le API jQuery ecc

+0

VisualJquery è fantastico. Se solo lo aggiornassero alla versione corrente che è stata fuori per circa 6 mesi ... – phairoh

0

È possibile utilizzare il elemento [id $ = Identificatore] notazione, che cerca l'id che termina con il testo specificato (è l'ID specificato nel markup ASPX). Ecco un esempio che illustra come è possibile utilizzarlo (vedere la diapositiva n. 30): Building intranet applications with ASP.NET AJAX and jQuery.

7

se il javascript è sullo stesso.il file aspx, si può fare:

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

Il javascript è nel proprio file (cioè non invadente). Ma come ho detto a Vdex, è una soluzione molto attraente e facile da usare; tuttavia, non quello che sto cercando. – Jagd

+0

In realtà, questo sarebbe $ ('# <% = txtSomeData1.ClientID%>'). Val ('Some More Data !!'); (nota il simbolo # - questo è qualcosa che a volte mi dimentico di me stesso) –

+1

una tecnica che ho usato è mappare i componenti dello schermo agli oggetti javascript; sul file .aspx puoi fare solo il mapping (id dell'elemento alla proprietà), quindi puoi usare quegli oggetti nei file .js – BlackTigerX

1

Se avete intenzione di esternalizzare il JavaScript ai propri file .js si è bloccato con entrambi codifica duro in id (più efficiente), un po 'di selezione delle espressioni regolari o utilizzando il inefficiente dal selettore del nome della classe.

Tuttavia, se è nello stesso file come il controllo di .NET si può sempre utilizzare $('<%=txtSomeData1.ClientID %>')

+0

Ho il javascript in un file js e probabilmente lo manterrà in questo modo, ma Devo ammettere che la tua soluzione ha un certo fascino. – Jagd

0

Si prega di utilizzare la seguente sintassi: $ ("[id * = txtSomeData1]") per fare riferimento a qualsiasi controllo asp

Problemi correlati