Introducción
jQuery es una de las librerías muy mencionada en los ultimo tiempo para el desarrollo de aplicaciones web.
Usar javascript de forma estándar puede ser algo bastante tedioso ya que no es una sintaxis del todo amigable para el trabajo diario, o al menos para quien esta acostumbrado a programa en un lenguaje amenos como ser C# o VB.NET.
Es por eso que surge jQuery, para solventar este problema, siendo el mas conocido entre los frameworks de javascript, (esta se gano su lugar en los témplate para la creación de proyectos como son los utilizados en aplicaciones con ASP.NET MVC), y el que dio impulso a la utilización de este tipo de frameworks, vale aclarar además que también existen otro como ser: Prototype, MooTools, etc
Este articulo en particular se sumara a los miles que existen publicados para aportar un punto de inicio para quienes aun no conocen la magia de esta librería.
Aquí no se pretende explicar cada unos de los aspectos de jQuery, porque solo el tema se selectores es enorme y muy variado, sino que iremos a casos concretos, y analizaremos particularidades en el uso de la librería.
jQuery es muy amplio, con mucha flexibilidad, cuando la usen verán que no hay una sola forma de hacer las cosas, a veces se pueden aplicar un selector con distintas combinaciones y todas estarán correctas.
Es por eso que es necesario recurrir a la fuente y consultar la documentación provista por la propia librería en su sitio web: jQuery
Para empezar veremos dos puntos básicos que afectan a la interacciones de asp.net y javascript, luego continuaremos con el análisis de dos controles simples para entrar en tema.
1 – Acceder a los controles de asp.net
Algo que debe conocerse cuando se trabaja con controles desde javascript es como hacer referencia a estos.
Por ejemplo, si en el html de una pagina se define:
<input id="Text1" type="text" />
desde javascript podría seleccionar el control usando:
var text1 = document.getElementById('Text1');
de esta forma se seleccionado el control cuando se trata de uno del tipo html, pero que sucede si ahora se tiene un control de asp.net, aquí ya no somos quienes controlamos el render del control, por lo tanto el ID asignado al mismo puede variar.
Muy bien, ahora si realizamos unas pruebas y ponemos un asp:TextBox en una página
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
al acceder desde el browser se vera como
<input name="TextBox1" type="text" id="TextBox1" />
ups, pero que sucedió aquí el id no se modifico, seguro pensaran que estoy mintiendo, pues bien, lo que sucede es que en algunas situaciones asp.net no cambie el id del control, porque en este caso no lo requiere, el verdadero problema se presente cuando este control esta contenido dentro de ciertos contenedores, como ser: un User Control, la Master Page, o controles que repiten un témplate, como ser el ListView, GridView, Repeater, etc
Entonces que sucede ahora si se crear un User Control (WebUserControl1.ascx) con el textbox dentro del mismo y se lo ubica en una pagina, al acceder al código del browser se obtendrá
<input name="WebUserControl11$TextBox1" type="text" id="WebUserControl11_TextBox1" />
Ahora si se comprueba como asp.net modifica el id asignado al control en tiempo de diseño, asp.net necesito ponerle un prefijo con el nombre del User Control para que este sea único, ya que en la pagina puede usarse mas de un mismo user control, sino redefine el id puede haber colisiones en los nombres.
Como se haría para seleccionar este control sino se conoce previamente el id que será generado, pues bien, se dispone en asp.net de la propiedad ClientID, siendo usada de la siguiente forma:
var userControlText1 = document.getElementById('<%=TextBox1.ClientID%>');
al inspeccionar el código resultante en el browser se obtendrá
var userControlText1 = document.getElementById('WebUserControl11_TextBox1');
el tag <%= %> permite ubicar allí el valor de la propiedad ClientID.
Si bien esto que comento parece un dato menos, es bastante importante cuando se comienzan a dar los primeros paso en javascript mezclado con controles del asp.net
2 – Acceder a controles asp.net desde un archivo .js
Continuando con el tip del punto anterior, avanzaremos en un tema que por ahí pueda generar dificultades a la hora de ordenar el código.
En algunas oportunidades uno requiera hacer uso de archivos .js para llevar allí el código javascript y trabajarlo de forma separada al html que esta en el aspx, pero es aquí donde empiezan los problemas.
Resulta que si se hace uso del tag <% %>, este solo puede ser aplicado dentro de la página donde se hace el render por parte de asp.net, o sea solo funciona dentro del aspx
El archivo .js es referenciado por el aspx, pero este no se incluye en el proceso de render, por lo tanto el ClientID nunca será reemplazado.
Pero hay una solución a este punto, la cual consiste en dejar la definición del tag <% %> dentro del aspx, pero que la misma solo asigne a una variable javascript el nombre del control, luego sera usada en el .js para así poder tomar el control y trabajarlo.
En la carpeta “Ejemplo2” esta la implementación del código de ejemplo, se observara la declaración de las líneas
<script type="text/javascript">
var TextBox1 = '<%=TextBox1.ClientID%>';
</script>
en donde se asigna en la pagina aspx el nombre como string, para luego dentro del .js usar
function ObtenerValor() {
var text1 = document.getElementById(TextBox1);
alert(text1.value);
}
Es necesario apreciar como cambio la selección al usar el getElementById(), usando ahora el nombre de la variable.
El único problema que se presenta es que por cada control que se quiera usar dentro de .js será necesario crear una variable en la pagina que incluya el ID que asp.net asigna.
3 – Obtener y asignar el valor de un Texbox
Seguramente se preguntaran “cuando comenzamos”, es cierto hasta aquí se presentaron temas mas relacionados con javascript, que al propio jquery, pero eran necesario tenerlos presente ya que estos también afectan al desarrollo.
Bien, comencemos con algo simple.
Seleccionemos el valor de un TextBox, copiando el contenido a otro:
[HTML]
<form id="form1" runat="server">
<table>
<tr>
<td>
<input id="txtInfo" type="text" />
</td>
<td>
<input id="btnMostrar" type="button" value="button" onclick="Mostrar_OnClick();"/>
</td>
</tr>
<tr>
<td colspan="2">
<input id="txtInfoCopia" type="text" />
</td>
</tr>
</table>
</form>
[JavaScript]
function Mostrar_OnClick() {
var info = $('#txtInfo').val();
$('#txtInfoCopia').val(info);
}
como se observa jquery lo hizo bien simple.
Es preciso conocer que cuando uno selecciona un control y lo hace por el atributo “id” debe anteponer el “#”, este es uno de los tanto selectores tiene jquery que iremos viendo.
Para que esto funcione es necesario contar con la librería, en este caso se encuentra en la línea
<script src="../script/jquery-1.5.2.min.js" type="text/javascript"></script>
por lo general se sitúa en la propia pagina, pero también es común verlo en la Master Page para que todas incluyan la librería, y no se tenga que declarar en cada una particularmente.
Y que sucede si se tratan de controles de asp.net, bien es igual de simple, pero conociendo lo que vimos en el punto: “1 – Acceder a los controles de asp.net”, se obtendría la misma funcionalidad usando:
[JavaScript]
function MostrarASPNET_OnClick() {
var info = $('#<%=txtInfoASPNET.ClientID%>').val();
$('#<%=txtInfoCopiaASPNET.ClientID%>').val(info);
}
Avancemos un poco inicializando los textbox, para hacerlo individualmente se podría aplicar algo como esto:
[JavaScript]
function LimpiarASPNET_OnClick() {
$('#<%=txtInfoASPNET.ClientID%>').val('');
$('#<%=txtInfoCopiaASPNET.ClientID%>').val('');
}
es idéntico a lo que ya se viene viendo solo que no se le pasa valor
Y si se quiere limpiar el contenido de todos los textbox, se deberá asignar uno a uno?, no es necesario, hay técnicas mucho mas simples:
[JavaScript]
function LimpiarTodos_OnClick() {
$(':text').val('');
}
aquí se puede ver otro selector distinto proporcionado por jQuery, en este caso se trata de un selector por tipo text el cual aplicara el valor a todos los controles que encuentre del tipo textbox.
Ahora bien, lo lindo que tiene esta librería es que no hay una sola forma de hacer esto, si se revisa la documentación: :text Selector, menciona que usar $('[type=text]') o $('*:text') y también $('input:text') son equivalentes, pero por simplicidad en la escritura se aplica :text
Nota: los ejemplos de esta sección se encuentra en el “Ejemplo 3” del código publicado.
4 – Trabajar con controles Label
Asignar un valor a un label difiere un poco de como se haría a un TextBox.
En el ejemplo de la carpeta “Ejemplo 4” se encontrara una muestra de como trabajar con este otro control.
en la pagina se agrego un label html
<label id="lblInfoCopia" />
y uno de asp.net
<asp:Label ID="lblInfoCopiaASPNET" runat="server"></asp:Label>
accederlo de forma individual no representa mayor problema, salvo por el hecho de cambiar el val() por el html() para tomar o asignar un valor.
Pero el seleccionar todos los labels de la pagina no es tan directo, ya que se renderiza diferentes en html estos controles, si se analiza el código generado en el browser se notara que el label de html sigue siendo un label, pero el de asp.net no lo es, ya que es transformado a un tag <span> cuando se convierte
Es por esto que debe seleccionarse distinto cada control.
[JavaScript]
function Mostrar_OnClick() {
var info = $('#txtInfo').val();
$('#lblInfoCopia').html(info);
}
function MostrarASPNET_OnClick() {
var info = $('#<%=txtInfoASPNET.ClientID%>').val();
$('#<%=lblInfoCopiaASPNET.ClientID%>').html(info);
}
function LimpiarASPNET_OnClick() {
$('#<%=txtInfoASPNET.ClientID%>').val('');
$('#<%=lblInfoCopiaASPNET.ClientID%>').html('');
}
function LimpiarTodos_OnClick() {
$(':text').val('');
$('label').html('');
$('span').html('');
}
Conclusión
Hasta aquí hemos tenido una introducción general a las particularidades del uso de javascript cuando se tratan controles asp.net.
También hemos visto como tratar dos controles muy usados en las paginas como son los textbox y labels.
En próximos artículos veremos mas controles ya sean html o asp.net, como adjuntar evento y recorrer el resultado de una selección para trabajar con cada uno de sus ítems
Código Ejemplo