Tomar información por pantalla con JavaScript Para lograr interactividad con nuestros usuarios, es necesario reaccionar a sus acciones o permitir que estos ingresen información para que sea manipulada, para con base en esto tomar decisiones. La forma mas sencilla de recopilar información de nuestros clientes es mediante la utilización del método de JavaScript “prompt()”, que despliega un mensaje de secuencia de comandos, que es similar a un alert pero con un campo de texto, y cuya sintaxis es: prompt(“pregunta”,”texto por defecto de la caja de texto”); Ejemplo: prompt("Digite su nombre","nombre"); Su resultado es: Para hacer de este cuadro una herramienta realmente útil, le podemos asignar su resultado a una variable. Ejemplo: var nom; nom=prompt("Digite su nombre","nombre"); En el ejemplo anterior, hemos declarado una variable “nom” en su primera línea, luego le asignamos el valor obtenido mediante el cuadro de secuencia de comandos. Luego de esto, podemos utilizar esta variable para cualquier objetivo. Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez Ejemplo: <html> <body> <script> var nom; nom=prompt("Digite su nombre","nombre"); alert("hola "+nom); </script> </body> </html> NOTA: Los datos que se obtienen por pantalla siempre serán cadenas (Strings), por consiguiente para poder realizar operaciones aritméticas con estos, se deben convertir a datos numéricos mediante los métodos: parseFloat(variable_a_convertir); : Convierte la variable para trabajar con números reales. parseInt(variable_a_convertir); : Convierte la variable para trabajar con números enteros. Ejemplo de parseFloat: <html> <head> <title>Ejemplo de parseFloat</title> <script> num1=parseFloat(prompt("Digite número uno","")); num2=parseFloat(prompt("Digite número dos","")); res=num1+num2; alert(res); </script> </head> <body> </body> </html> Siendo num1=5.3; y num2=3.2 Entonces, res=8.5 Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez Ejemplo de parseInt: <html> <head> <title>Ejemplo de parseInt</title> <script> num1=parseInt(prompt("Digite número uno","")); num2=parseInt(prompt("Digite número dos","")); res=num1+num2; alert(res); </script> </head> <body> </body> </html> Siendo num1=5.3; y num2=3.2 Entonces, res=8 Sin lugar a dudas el método “prompt()” es muy útil para tomar datos por pantalla, pero nos hemos preguntado ¿Qué pasará cuando tengamos que recibir mucha información del cliente?, ¿será y agradable para el usuario ver tantos cuadros de dialogo uno tras otro?. Definitivamente la solución a estos problemas la tenemos en la utilización de formularios HTML. JavaScript y formularios El principal uso de los formularios es el de recopilar información de todo tipo sobre la persona que visita nuestra pagina, que podemos utilizar luego para muy diversos fines: inclusión en listas de correo, corrección de nuestras paginas basándonos en la opinión de nuestros visitantes, recepción de artículos y programas, etc. Pero si bien los formularios son muy útiles si los sabemos usar bien, por sí solos tienen poca utilidad, y esto es debido a que con el uso exclusivo de HTML podemos crear el formulario, pero no disponemos de herramientas que nos permitan ni procesar los datos recibidos, ni validar los datos introducidos antes de su envío ni dar vida a los campos para que la interactividad con el usuario sea la adecuada. Sin lugar a dudas la herramienta más útil con la que contamos para hacer nuestros formularios más eficientes es el uso del lenguaje de scripting Javascript. Es un lenguaje formado por trozos de código que se insertan en las propias paginas web, y que permite el manejo dinámico de las mismas por Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez parte del programador, de tal forma que es posible verificar y/o cambiar propiedades de los elementos de la pagina sin tener que volver a realizar una conexión con el servidor, así como realizar cálculos y transferencias de datos entre los campos del formulario. El objeto form depende en la jerarquía de objetos del objeto document. En un objeto form podemos encontrar algunos métodos y propiedades, pero lo más destacado que podremos encontrar son cada uno de los elementos del formulario. Es decir, de un formulario dependen todos los elementos que hay dentro, como pueden ser campos de texto, cajas de selección, áreas de texto, botones de radio, etc. Para acceder a un formulario desde el objeto document podemos hacerlo de dos formas. 1. A partir de su nombre, asignado con el atributo NAME de HTML. 2. Mediante la matriz de formularios del objeto document, con el índice del formulario al que queremos acceder. Para este formulario <FORM name="f1"> <INPUT type=text name=campo1> <INPUT type=text name=campo2> </FORM> Podremos acceder con su nombre de esta manera. document.f1 O con su índice, si suponemos que es el primero de la página. document.forms[0] De similar manera accedemos a los elementos de un formulario, que dependen del objeto form. 1. A partir del nombre del objeto asignado con el atributo NAME de HTML. 2. Mediante la matriz de elementos del objeto form, con el índice del elemento al que queremos acceder. Podríamos acceder al campo 1 del anterior formulario de dos maneras. Con su nombre lo haríamos así. document.f1.campo1 Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez O a partir del array de elementos. document.f1.elements[0] (utilizamos el índice 0 porque es el primer elemento y en Javascript los arrays empiezan por 0.) Si deseamos acceder al segundo campo del formulario escribiríamos una de estas dos cosas: document.f1.campo2 document.f1.elements[1] Recordemos que también podemos acceder a un formulario por el array de forms, indicando el índice del formulario al que acceder. De este modo, el acceso al campo2 sería el siguiente: document.forms[0].campo2 document.forms[0].elements[1] En estos casos he supuesto que este formulario es el primero que hay escrito en el código HTML, por eso accedo a él con el índice 0. Después de dejar claro como acceder a los elementos de un formulario, observaremos el uso de cada uno de estos basándonos en el siguiente ejemplo: Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez Su código seria: <html> <head> <title>Ejemplo de formulario</title> </head> <body> <table border=1> <form name="f1" action="_blank" method="post"> <tr> <td>Digite su nombre: </td> <td> <input type="text" name="nombre" size=26> </td> </tr> <tr> <td>Sexo: </td> <td> <select name="seleccion"> <option value="hombre">Masculino</option> <option value="mujer">Femenino</option> </select> </td> </tr> <tr> <td>Cual es su canal de tv favorito: </td> <td> <input type="radio" name="botonradio" value="rcn"> RCN<br> <input type="radio" name="botonradio" value="caracol"> Caracol<br> <input type="radio" name="botonradio" value="telecafe"> Telecafé </td> </tr> <tr> <td>Que es lo que mas le gusta del canal? : </td> <td> <textarea cosl=10 rows=10> </textarea> </td> </tr> <tr> <td>De los siguientes programas seleccione su(s) preferido(s): </td> <td> <input type="checkbox" name="caja" value="Futbol mania"> Futbol Mania<br> <input type="checkbox" name="caja" value="En los Tacones de Eva"> En los tacones de Eva<br> <input type="checkbox" name="caja" value="El club 10"> El club 10<br> <input type="checkbox" name="caja" value="Desafio 2007"> Desafio 2007<br> Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez <input type="checkbox" name="caja" value="La isla de los famosos"> La isla de los famosos<br> <input type="checkbox" name="caja" value="Abre tu corazon"> Abre tu corazon<br> <input type="checkbox" name="caja" value="Cafe gol">Cafe gol </td> </tr> <tr> <td colspan=2> <center> <input type="reset" value="reiniciar"> <input type="submit" value="enviar"> <input type="button" value="procesar"> <center> </td> </tr> </form> </table> </body> </html> (Antes de empezar, es necesario que recordemos que el valor de un elemento se encuentra en su atributo “value”). Para tomar e imprimir los datos del formulario, vamos a declarar la función “procesa()” en la cabecera del documento, de la siguiente forma: <head> <title>Ejemplo de formulario</title> <script language="javascript"> function procesa() { } </script> </head> NOTA: Todo lo que realicemos de ahora en adelante, estará dentro de esta función. Luego de esto declaramos una variable de impresión: var imprimir; Esta variable será la encargada de almacenar los resultados de cada elemento del formulario, concatenados con etiquetas HTML para luego imprimirla por medio de “document.write”. Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez Acceder al objeto “text” Sintaxis: Variable_para_almacenar_los_datos=document.nombre_formulario.nombre_ca mpo.value; En nuestro ejemplo: nom= document.f1.nombre.value; imprimir+="Hola "+nom+"<br>"; A la variable “nom”, la llevamos lo que se encuentre en nuestro campo de texto el cual llamamos “nombre”, el cual se encuentra en el formulario que llamamos “f1”. Luego le concatenamos al valor de la variable imprimir mediante el operador “+=”, la cadena “Hola”, a esta le concatenamos la variable “nom”, y por ultimo, le adicionamos un salto de linea mediante “<br>”. Acceder al objeto “select” Primero se debe investigar el índice del valor seleccionado Sintaxis: Variable_para_almacenar_indice=document.nombre_formulario.nombre_select. selectedIndex Luego tomo el valor del select en el índice seleccionado Sintaxis: Variable_para_almacenar_valor=document.nombre_formulario.nombre_select. options[variable_que_almaceno_el_indice].value; En nuestro ejemplo: indice=document.f1.seleccion.selectedIndex; sex=document.f1.seleccion.options[indice].value; imprimir+="Usted es: "+sex+"<br>"; A la variable “indice” le llevamos el número de índice de la opción seleccionada en el select. A la variable “sex” la llevamos el valor del select en el índice que se almaceno en la variable “indice”. Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez Luego a la variable “imprimir”, le concatenamos a su valor la cadena “Usted es:” mas la variable “sex” mas el salto de línea de HTML “<br>”. Acceder al objeto “radio” Para poder verificar cual fue el radio activado, se debe recorrer todo el objeto utilizándolo como un array. Sintaxis: for(i=0; i<document.nombre_formulario.nombre_radio.length; i++) { If(document.nombre_formulario.nombre_radio[ i ].checked) { break; } } Luego almacenamos su valor en una variable. Sintaxis: Variable_para_almacenar_valor=document.nombre_formulario.nombre_radio.[i ndice_del_ciclo].value; En nuestro ejemplo: for(i=0; i<document.f1.botonradio.length; i++) { if(document.f1.botonradio[i].checked) { break; } } radio = document.f1.botonradio[i].value; imprimir+="Su canal favorito es: "+radio+"<br>"; Con lo anterior obtenemos el índice del radio activado. Esto gracias al recorrido matricial que se le realiza al objeto. Cuando se encuentre un radio activado, se detiene el ciclo mediante la sentencia “break;”. A la variable “radio” le llevamos el valor del radio seleccionado. Luego a la variable “imprimir”, le concatenamos a su valor la cadena “Su Canal favorito es: “ mas la variable “radio” mas el salto de línea HTML “<br>”. Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez Acceder al objeto “textarea” Trabajar con el objeto “textarea”, es similar a trabajar con el objeto “text” Sintaxis: Variable_para_almacenar_valor=document.nombre_formulario.nombre_textare a.value; En nuestro ejemplo: com= document.f1.comentario.value; imprimir+="Lo que mas le gusta del canal es: "+com+"<br>"; A la variable “com”, le llevamos lo que se encuentra en nuestro textarea. Luego a la variable “imprimir”, le concatenamos a su valor la cadena “Lo que mas le gusta del canal es: “ mas la variable “com” mas el salto de línea HTML “<br>”. Acceder al objeto “checkbox” El objeto “checkbox” funciona de forma similar al objeto “radio”, pero es importante tener en cuenta que podemos seleccionar varias cajas de texto al mismo tiempo. Se debe recorrer el objeto “checkbox” como una matriz para detectar las cajas seleccionadas. Aprovechando lo anterior, cada que encontremos una caja seleccionada, almacenamos su valor en una variable. Sintaxis: var variable_almacenamiento=””; for(j=0; j<document.nombre_formulario.nombre_checkbox.length; j++) { If(document.nombre_formulario.nombre_checkbox[ j ].checked) { Variable_almacenamiento=variable_almacenamiento+document.nombre _formulario.nombre_checkbox[ j ].value; } } Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez En nuestro ejemplo: var cajadetexto=""; for(j=0; j<document.f1.caja.length; j++) { if(document.f1.caja[j].checked) { cajadetexto = cajadetexto+", "+document.f1.caja[j].value; } } imprimir+="sus programas preferidos son: "+cajadetexto; Declaramos la variable “cajadetexto” y le llevamos un valor vacío. Después, empezamos a recorrer el objeto como una matriz, cada que nos encontramos con una caja marcada, la almacenamos en la variable “cajadetexto”, utilizando como caracter de separación una coma “, “. Luego a la variable “imprimir”, le concatenamos a su valor la cadena “sus programas preferidos son: “ mas la variable “cajadetexto”. Por ultimo imprimimos la variable “imprimir”: document.write(imprimir); Ya tenemos lista nuestra función “procesa()”, ahora lo único que falta es invocarla y lo vamos a realizar por medio de la función “onClick” en uno de los botones: <input type="button" value="procesar" onClick=procesa();> A continuación, se presenta el código de ejemplo completo: <html> <head> <title>Ejemplo de formulario</title> <script language="javascript"> function procesa() { //declaro variable de impresion, en esta acumulare una cadena concatenando etiquetas html para luego mandar a imprimir var imprimir=""; //aqui tomo los datos del campo de texto y los imprimo nom= document.f1.nombre.value; imprimir+="Hola "+nom+"<br>"; //aqui verifico el select //con estas sentencias verifico el valor seleccionado en el select Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez indice=document.f1.seleccion.selectedIndex; //aqui tomo el valor del select en la posicion del indice sex=document.f1.seleccion.options[indice].value; imprimir+="Usted es: "+sex+"<br>"; //aqui reviso la opcion del radio boton //variable para almacenar el valor del radio button var radio=""; for(i=0; i<document.f1.botonradio.length; i++) { if(document.f1.botonradio[i].checked) { break; } } radio = document.f1.botonradio[i].value; imprimir+="Su canal favorito es: "+radio+"<br>"; //tomo los comentarios del textarea com= document.f1.comentario.value; imprimir+="Lo que mas le gusta del canal es: "+com+"<br>"; //observo los programas preferidos seleccionados por medio de las cajas de texo //variable para almacenar el valor de las cajas de exto var cajadetexto=""; for(j=0; j<document.f1.caja.length; j++) { if(document.f1.caja[j].checked) { //la variable cajadetexto la concateno con los values de los checkbox cajadetexto = cajadetexto+", "+document.f1.caja[j].value; } } imprimir+="sus programas preferidos son: "+cajadetexto; //realizo impresion document.write(imprimir); } //funcion para confirmar el envio del formulario function pregunta() { if(confirm('¿Esta seguro de enviar este formulario?')) { document.f1.submit() Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez } } </script> </head> <body> <table border=1> <form name="f1" action="_blank" method="post"> <tr> <td>Digite su nombre: </td> <td> <input type="text" name="nombre" size=26> </td> </tr> <tr> <td>Sexo: </td> <td> <select name="seleccion"> <option value="Hombre">Masculino</option> <option value="Mujer">Femenino</option> </select> </td> </tr> <tr> <td>Cual es su canal de tv favorito: </td> <td> <input type="radio" name="botonradio" value="RCN"> RCN<br> <input type="radio" name="botonradio" value="Caracol"> Caracol<br> <input type="radio" name="botonradio" value="Telecafe"> Telecafé </td> </tr> <tr> <td>Que es lo que mas le gusta del canal? : </td> <td> <textarea name="comentario" cosl=10 rows=10> </textarea> </td> </tr> <tr> <td>De los siguientes programas seleccione su(s) preferido(s): </td> <td> <input type="checkbox" name="caja" value="Futbol mania"> Futbol Mania<br> <input type="checkbox" name="caja" value="En los Tacones de Eva"> En los tacones de Eva<br> <input type="checkbox" name="caja" value="El club 10"> El club 10<br> <input type="checkbox" name="caja" value="Desafio 2007"> Desafio 2007<br> <input type="checkbox" name="caja" value="La isla de los famosos"> La isla de los famosos<br> Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez <input type="checkbox" name="caja" value="Abre tu corazon"> Abre tu corazon<br> <input type="checkbox" name="caja" value="Cafe gol">Cafe gol </td> </tr> <tr> <td colspan=2> <center> <input type="reset" value="reiniciar"> <input type="button" value="enviar" onClick=pregunta();> <input type="button" value="procesar" onClick=procesa();> <center> </td> </tr> </form> </table> </body> </html> Programación para Sistemas en Red I Profesor: Julio Cesar Meza Ramírez