2009-08-13 18 views
13

¡Acabo de empezar a usar JQuery en VS 2008, y hasta ahora me gusta! Pero estoy confundido acerca de cómo debería usar JQuery para seleccionar controles asp.net en una página web.Seleccionar por atributo de ID usando JQuery en ASP.NET

Por ejemplo, tengo el siguiente código (sólo una maqueta):

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

Ahora, si quiero usar jQuery para seleccionar el cuadro de texto y cambiar su texto a "Algunos Más datos !! ", entonces tendría que hacer algo como:

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

cual, francamente, es molesto porque no quiero ensuciar con tener que averiguar cuál es el id del control es después de que ha prestado a la página web (ctl00_ContextPlaceHolder ... blah blah blah).

¿Hay alguna manera de que pueda seleccionar el cuadro de texto sin tener que usar la identificación del mismo? Además, sé que puede seleccionar por nombre de clase, pero eso no ayuda mucho si el control que está seleccionando no tiene una clase.

¿Me falta algo aquí?

SOLO PARA REITERAR: ¡No quiero usar una clase para seleccionar la etiqueta de entrada! Me gustaría utilizar el ID "txtSomeData1" y no el ID largo que se representa en la página web.

+0

Si tiene que cambiar la ID del elemento en la página generada, tendría que cambiar la salida en el lado de la asp. Entonces, esto es más una pregunta ASP que una pregunta jquery. – airportyh

+0

Hizo una edición del título en consecuencia. – Jagd

Respuesta

14

Lo que se quiere hacer es o bien:

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

o se puede añadir un atributo de clase o costumbre en el cuadro de texto que se pueden seleccionar en

+0

nice one jaimedp. +1 –

+0

No puedo hacer que esto funcione, ¡pero creo que es lo que estoy buscando! Aunque no he probado el atributo personalizado todavía. Es $ = un partido comodín? – Jagd

+0

Esto es exactamente lo que probé: $ ("input [id $ = '_ txtSomeData1'"). Val ('Some More Data !!'); – Jagd

1

Ésta es una gran queja de la comunidad tiene con ASP .Net web forms. En ASP.Net 4.0, obtiene el control de sus ID, por lo que es como si lo hubiera escrito en HTML sin formato. Alternativamente, sin .Net 4.0, podría usar ASP.Net MVC que, en su mayor parte, no utiliza controles de servidor, por lo que no tendría el problema.

Pero, como dice happytime harry, es posible que desee agregar una clase si desea trabajar con formularios web y jquery.

+0

¡Impresionante! No sabía que 4.0 no tendría los molestos IDs con los que meterse. Esas son buenas noticias. – Jagd

0

Puede agregar clases 'marcador' a cualquier control cuyo único propósito sea para usar en un selector jQuery. Eso, junto con la navegación por el árbol de jerarquía (algo así como "$(element).children('.myClass').show()" podría ser una buena manera de hacer esto sin ID.

Por cierto, http://visualjquery.com/ es una gran manera de ver las API de jQuery etc.

+0

VisualJquery es genial. Si solo lo actualizaran a la versión actual que ha estado fuera por 6 meses ... – phairoh

0

Puede utilizar el identificación del elemento [id $ = Identificador], que busca el ID que termina con el texto que especifique (es el ID que especifica en el marcado ASPX). Aquí hay un ejemplo que ilustra cómo puede usarlo (ver diapositiva # 30): Building intranet applications with ASP.NET AJAX and jQuery.

7

si el javascript es el mismo.aspx, que puede hacer:

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

El javascript está en su propio archivo (es decir, no intrusivo). Pero como le dije a Vdex, es una solución muy atractiva y fácil de usar; Sin embargo, no es el que estoy buscando. – Jagd

+0

En realidad, esto sería $ ('# <% = txtSomeData1.ClientID%>'). Val ('¡Más datos!'); (tenga en cuenta el signo # - esto es algo que a veces me olvido a mí mismo) –

+1

una técnica que he utilizado es asignar componentes de la pantalla a objetos javascript; en el archivo .aspx puedes hacer solo la asignación (identificación del elemento a la propiedad), luego puedes usar esos objetos en los archivos .js – BlackTigerX

1

Si va a exteriorizar el JavaScript para sus propios Js archivo que está atascado, ya sea con codificación dura en el ello (más eficiente), algunos selector de expresión regular o el uso de la ineficiente por selector de nombre de clase.

Sin embargo, si es en el mismo archivo que el control de .NET podría utilizar siempre $('<%=txtSomeData1.ClientID %>')

+0

Tengo el javascript en un archivo js y es probable que lo mantenga así, pero Debo admitir que su solución tiene cierto atractivo. – Jagd

0

Utilice la siguiente sintaxis: $ ("[id * = txtSomeData1]") para hacer referencia a ningún tipo de control asp

Cuestiones relacionadas