CONTROLES FORMULARIOS – PRIMERA PARTE Acceder a los formularios de una página a través de su nombre Acceder a los formularios de una página a través de su nombre (atributo name) o a través de su atributo id. El objeto document permite acceder directamente a cualquier formulario mediante su atributo name: var formularioPrincipal = document.formulario; var formularioSecundario = document.otro_formulario; <form name="formulario" > </form> <form name="otro_formulario" > </form Los elementos de los formularios también se pueden acceder directamente mediante su atributo name var formularioPrincipal = document.formulario; var primerElemento = document.formulario.elemento; <form name="formulario"> <input type="text" name="elemento" /> </form> Acceder a los formularios de una página a través de su id Obviamente, también se puede acceder a los formularios y a sus elementos utilizando las funciones DOM de acceso directo a los nodos. El siguiente ejemplo utiliza la habitual función document.getElementById() para acceder de forma directa a un formulario y a uno de sus elementos: var formularioPrincipal = document.getElementById("formulario"); var primerElemento = document.getElementById("elemento"); <form name="formulario" id="formulario" > <input type="text" name="elemento" id="elemento" /> </form> 1 Independientemente del método utilizado para obtener la referencia a un elemento de formulario, cada elemento dispone de las siguientes propiedades útiles para el desarrollo de las aplicaciones: type: indica el tipo de elemento que se trata. Para los elementos de tipo <input> (text, button, checkbox, etc.) coincide con el valor de su atributo type. Para las listas desplegables normales (elemento <select>) su valor es select-one, lo que permite diferenciarlas de las listas que permiten seleccionar varios elementos a la vez y cuyo tipo es select-multiple. Por último, en los elementos de tipo <textarea>, el valor de type es textarea. form: es una referencia directa al formulario al que pertenece el elemento. Así, para acceder al formulario de un elemento, se puede utilizar document.getElementById("id_del_elemento").form name: obtiene el valor del atributo name de XHTML. Solamente se puede leer su valor, por lo que no se puede modificar. value: permite leer y modificar el valor del atributo value de XHTML. Para los campos de texto (<input type="text"> y <textarea>) obtiene el texto que ha escrito el usuario. Para los botones obtiene el texto que se muestra en el botón. Para los elementos checkbox y radiobutton no es muy útil, como se verá más adelante Por último, los eventos más utilizados en el manejo de los formularios son los siguientes: onclick: evento que se produce cuando se pincha con el ratón sobre un elemento. Normalmente se utiliza con cualquiera de los tipos de botones que permite definir XHTML (<input type="button">, <input type="submit">, <input type="image">). onchange: evento que se produce cuando el usuario cambia el valor de un elemento de texto (<input type="text"> o <textarea>). También se produce cuando el usuario selecciona una opción en una lista desplegable (<select>). Sin embargo, el evento sólo se produce si después de realizar el cambio, el usuario pasa al siguiente campo del formulario, lo que técnicamente se conoce como que "el otro campo de formulario ha perdido el foco". onfocus: evento que se produce cuando el usuario selecciona un elemento del formulario. onblur: evento complementario de onfocus, ya que se produce cuando el usuario ha deseleccionado un elemento por haber seleccionado otro elemento del formulario. Técnicamente, se dice que el elemento anterior "ha perdido el foco". Veamos ahora los elementos que forman un formulario , sus propiedades y eventos Para ver más propiedades y eventos En Dreamweaver utilizar panel Referencia Mayusc+F1. Libro o'reilly JavaScript Reference .Seleccionar Objeto y ver propiedades y eventos Pej Object : input ( type =”text” ) Object : input ( type =”button” ) 2 CONTROLES TEXT HTML <input type="text"> Referencia Modelo de objetos [window.]document.formName.elementName [window.]document.forms[i].elements[i] [window.]document.getElementById("elementID") Propidades Eventos Funciones Veamos un ejemplo <script type="text/javascript"> function fnPropiedades() { // ============ Accediendo a su valor ============================= // // var nombre=document.getElementById("txtNombre").value; var nombre=document.Form1.Nombre.value; var nombre=document.forms[0].item(0).value; //IE funciona en FF y CR NO // // var edad=document.getElementById("txtEdad").value; var edad=document.Form1.Edad.value; var edad=document.forms[0].item(1).value; var txt=nombre+" "+edad; document.getElementById("txtResultado").value=txt; // ============ Accediendo a propiedades y funciones ========= document.getElementById("txtNombre").size="5"; document.getElementById("txtNombre").readOnly=true; document.getElementById("txtEdad").select(); } </script> 3 <body> <h3>Acceder al valor de un campo de texto</h3><br> <form name="Form1"> Nombre : <input type="text" name="Nombre" id="txtNombre" value="Ana" size="10" ><br> Edad : <input type="text" name="Edad" id="txtEdad" value="20" size="10" ><br> <input type="button" value="Pulsame" onclick="fnPropiedades()" /> Resultado: <input type="text" id="txtResultado" size="40" value="" /> </form> <h3>¿Cómo usar los eventos del teclado de Javascript?</h3><br> <input type="text" value="onkeypress" readonly="readonly" onkeypress="alert('Haz soltado una tecla.')"><br> <input type="text" value="onkeydown" readonly="readonly" onkeydown="alert('Haz presionado una tecla.')"><br> <input type="text" value="onkeyup" readonly="readonly" onkeyup="alert('Haz liberado una tecla.')"><br><br> <h3>¿Cómo usar los eventos onfocus y onblur de Javascript?</h3><br> <input type="text" size="50" onfocus="value='Tengo el focus, puedes escribir aquí';" onblur="value='Perdí el focus';"><br> <em>onfocus</em> Un elemento obtiene el focus<br> <em>onblur</em> Un elemento pierde el focus<br><br> <h3>¿Cómo usar el evento onselect de Javascript?</h3><br> <input class="inp" type="text" value="onselect" onselect="alert('Haz seleccionado texto')"><br><br> <h3>¿Cómo usar el evento onchange de Javascript?</h3><br> <input class="inp" type="text" value="onchange" onchange="style.backgroundColor='red';"><br><br> </body> 4 EJERCICIOS CONTROL TEXT Crear un programa que permita cargar un entero en un text y al presionar un botón nos muestre dicho valor elevado al cubo (emplear la función alert). Cargar dos números en objetos de tipo text y al presionar un botón, mostrar el mayor. Cargar un nombre y un apellido en sendos text. Al presionar un botón, concatenarlos y mostrarlos en un tercer text Crea un script que simule a una calculadora sencilla EJERCICIOS CONTROL PASSWORD Codificar una página que permita ingresar una password y luego muestre una ventana de alerta si tiene menos de 5 caracteres. Disponer dos campos de texto tipo password. Cuando se presione un botón mostrar si las dos claves ingresadas son iguales o no CONTROL SELECT Para determinar la posición del índice seleccionado en la lista document.form1.select1.selectedIndex Considerando que el objeto SELECT se llama select1 accedemos a la propiedad selectedIndex (almacena la posición del string seleccionado de la lista, numerando a partir de cero). Para determinar el valor seleccionado: document.form1.select1.options[document.form1.select1.selectedIndex].text Es decir que el objeto select1 tiene otra propiedad llamada options, a la que accedemos por medio de un subíndice, al string de una determinada posición. 5 Hay problemas en los que solamente necesitaremos el string almacenado en el objeto SELECT y no el valor asociado (no es obligatorio asociar un valor a cada string). Y por último con esta expresión accedemos al valor asociado al string: document.form1.select1.options[document.form1.select1.selectedIndex].value Ejemplo <script language="JavaScript"> function cambiarColor() { document.form1.text1.value = document.form1.select1.selectedIndex; document.form1.text2.value = document.form1.select1.options[document.form1.select1.selectedIndex].text; document.form1.text3.value = document.form1.select1.options [document.form1.select1.selectedIndex].value; } </script> <form name="form1"> <select size="1" name="select1" onChange="cambiarColor()"> <option value="0xff0000">Rojo</option> <option value="0x00ff00">Verde</option> <option value="0x0000ff">Azul</option> </select> <br> Número de índice seleccionado del objeto SELECT:<input type="text" name="text1"><br> Texto seleccionado:<input type="text" name="text2"><br> Valor asociado:<input type="text" name="text3"><br> </form> EJERCIOS SELECT Confeccionar una página que muestre un objeto SELECT con distintos tipos de pizzas (Jamón y Queso, Mozzarella, Morrones). Al seleccionar una, mostrar en un objeto de tipo TEXT el precio de la misma. Generar un presupuesto de un equipo de computación a partir de tres objetos de tipo SELECT que nos permiten seleccionar: - Procesador (Pentium III - $400, Pentium IV $500). - Monitor (Samsung 14' - $250, Samsung 15' - $350, Samsung 17' - $550) - Disco Duro(80 Gb - $300, 240 Gb - $440, 800 Gb - $500) Para cada característica indicamos string a mostrar (Ej. Pentium III) y el valor asociado a dicho string (Ej. 400). Al presionar un botón "Calcular" mostrar el presupuesto en un objeto de tipo TEXT. 6 Confeccionar una página que permita seleccionar una pizza y la cantidad de unidades. Luego al presionar un botón calcular el importe a pagar. Utilizar un objeto de la clase SELECT para la selección de la pizza, pudiendo ser: - Queso: $ 4. - Jamón y queso: $ 6. - Especial: $ 10. A la cantidad de pizzas cargarla en un objeto de la clase TEXT y en otro objeto de la clase TEXT mostrar el importe total a abonar. Confeccionar una página que permita crear un examen. Se debe mostrar una pregunta y seguidamente un objeto SELECT con las respuestas posibles. Al presionar un botón mostrar la cantidad de respuestas correctas e incorrectas (Disponer 4 preguntas y sus respectivos controles SELECT). CONTROL CHECKBOX Confeccionar una página que muestre 4 lenguajes de programación que el usuario puede seleccionar si los conoce. Luego mostrar un mensaje indicando la cantidad de lenguajes que ha seleccionado el operador. <script language="JavaScript"> function contarSeleccionados() { var cant=0; if (document.form1.lenguaje1.checked) cant++; if (document.form1.lenguaje2.checked) cant++; if (document.form1.lenguaje3.checked) cant++; if (document.form1.lenguaje4.checked) cant++; alert('Conoce ' + cant + ' lenguajes'); } </script> <form name="form1"> <input type="checkbox" name="lenguaje1">JavaScript<br> <input type="checkbox" name="lenguaje2">PHP<br> <input type="checkbox" name="lenguaje3">JSP<br> <input type="checkbox" name="lenguaje4">VB.Net<br> <input type="button" value="Mostrar" onClick="contarSeleccionados()"> </form> 7 EJERCICIOS CHECBOX Confeccionar una página que muestre tres checkbox que permitan seleccionar los deportes que practica el usuario (Futbol, Basket, Tennis) Mostrar al presionar un botón los deportes que a elegido CONTROL RADIO Mostrar cuatro objetos de tipo RADIO que permitan seleccionar los estudios que tiene un usuario: <script language="JavaScript"> function mostrarSeleccionado() { if (document.form1.estudios[0].checked) alert('no tienes estudios'); if (document.form1.estudios[1].checked) alert('tienes estudios primarios'); if (document.form1.estudios[2].checked) alert('tienes estudios secundarios'); if (document.form1.estudios[3].checked) alert('tienes estudios universitarios'); } </script> <form name="form1"> <input type="radio" name="estudios" value="sin estudios">Sin estudios <br> <input type="radio" name="estudios">Primarios <br> <input type="radio" name="estudios">Secundarios <br> <input type="radio" name="estudios">Universitarios <br> <input type="button" value="Mostrar" onClick="mostrarSeleccionado()"> EJERCICIOS RADIO Confeccionar una página que muestre dos objetos de la clase RADIO solicitando que seleccione si es mayor de 18 años o no. Al presionar un botón mostrar que radio está seleccionado. CONTROL TEXTAREA Este control es similar al control TEXT, salvo que permite el ingreso de muchas líneas de texto. La marca TEXTAREA en HTML tiene dos propiedades: rows y cols que nos permiten indicar la cantidad de filas y columnas a mostrar en pantalla. 8 Ejemplo: Solicitar la carga del mail y el curriculum de una persona. Mostrar un mensaje si el curriculum supera los 2000 caracteres. <html> <head> </head> <body> <script language="JavaScript"> function controlarCaracteres() { if (document.form1.curriculum.value.length>2000) alert('curriculum muy largo'); else alert('datos correctos'); } </script> <form name="form1"> <textarea name="curriculum" rows="10" cols="50" ></textarea> <br> <input type="button" value="Mostrar" onClick="controlarCaracteres()"> </form> </body> </html> EJERCICIO TEXTAREA Confeccionar una página de visitas a un sitio, solicitar ingresar el nombre de una persona, su mail y los comentarios (TEXTAREA). Mostrar luego llamando a la función alert los datos ingresados. Cuenta los caracteres escritos en un textarea 9 EVENTOS ONFOCUS Y ONBLUR El evento onFocus se dispara cuando el objeto toma foco y el evento onBlur cuando el objeto pierde el foco. Ejemplo: Implementar un formulario que solicite la carga del nombre y la edad de una persona. Cuando el control tome foco borrar el contenido actual, al abandonar el mismo, mostrar un mensaje de alerta si el mismo está vacío. <script language="JavaScript"> function vaciar(control) { control.value=''; } function verificarEntrada(control) { if (control.value=='') alert('Debe ingresar datos'); } </script> <form name="form1"> Ingrese su nombre: <input type="text" name="nombre" onFocus="vaciar(this)" onBlur="verificarEntrada(this)"><br> Ingrese su edad: <input type="text" name="edad" onFocus="vaciar(this)" onBlur="verificarEntrada(this)"><br> <input type="button" value="Confirmar"> </form> EJERCICIO Solicitar que se ingrese el nombre y la clave de un usuario. Mostrar una ventana de alerta si en la clave se ingresan menos de 7 caracteres o más de 20. OnBlur - Comprobar si el valor de una caja de texto es un numero. Pista IsNaN() 10 EVENTOS ONMOUSEOVER Y ONMOUSEOUT El evento onMouseOver se ejecuta cuando pasamos la flecha del mouse sobre un hipervínculo y el evento onMouseOut cuando la flecha abandona el mismo. Para probar estos eventos implementaremos una página que cambie el color de fondo del documento. Implementaremos una función que cambie el color con un valor que llegue como parámetro. Cuando retiramos la flecha del mouse volvemos a pintar de blanco el fondo del documento: Imagen efecto rollover , al pasar el raton por encima de la imagen se cambia , y al salir de la imagen se muestra la original EVENTO ONLOAD El evento onLoad se ejecuta cuando cargamos una página en el navegador. Uno de los usos más frecuentes es para fijar el foco en algún control de un formulario, para que el operador no tenga que activar con el mouse dicho control. Este evento está asociado a la marca body. Haz yb script para comprobarlo 11