Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Programacion Javascript Parte2
Manual Programacion Javascript Parte2
com
Programacin en Javascript II
En este manual explicamos todos los recursos con los que cuenta un programador de Javascript para crear todo tipo de efectos y aplicaciones.
Parte 1:
'omo se puede ver todos los temas tienen un fuerte car$cter pr$ctico y cubren aspectos varios con los que formarnos a nivel avan(ado en Javascript. Esperamos que sirvan para iluminar un $rea tan amplia del desarrollo de p$ginas )eb como es el scripting del lado del cliente. *dem$s ya fuera de este manual te recordamos que en +esarrollo,eb.com tienes disponibles muchos m$s artculos y manuales dedicados a este lengua#e que te servir$n para profundi(ar en la materia como los frame)or-s #.uery o /ootools traba#o con im$genes canvas as como videotutoriales para los que prefieran aprender con vdeo. * todo ello podr$s acceder desde la seccin Javascript a fondo0 1amos sin m$s pausa con esta segunda parte del manual que resultar$ mucho m$s entretenida y pr$ctica que la primera.
Artculo por
Parte 2:
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com "as libreras que se implementan mediante ob#etos y las del mane#o del explorador que tambi!n se mane#an con ob#etos las veremos m$s adelante.
Nota: 9o queremos llevar a enga:o a las personas con esta corta lista de funciones nativas de Javascript. 5ealmente existen muchas otras funciones que vamos a ver a lo largo del presente manual lo que ocurre es que est$n asociadas a ob#etos. Por e#emplo como habamos se:alado existen funciones de cadenas de caracteres que est$n asociadas a ob#etos string funciones para traba#o con c$lculos matem$ticos avan(ados que est$n asociadas a la clase /ath funciones para traba#o con el ob#eto de la ventana del navegador con el documento etc.
* continuacin vamos a ver alg4n e#emplo con las funciones m$s importantes de esta lista.
Artculo por
Primero creamos una variable con un texto en la siguiente lnea utili(amos la funcin eval y como par$metro le pasamos una instruccin #avascript para escribir en pantalla. 3i concatenamos los strings que hay dentro de los par!ntesis de la funcin eval nos queda esto.
document.write(3 + 5)
"a funcin eval e#ecuta la instruccin que se le pasa por par$metro as que e#ecutar$ esta sentencia lo que dar$ como resultado que se escriba un ; en la p$gina )eb. Primero se resuelve la suma que hay entre par!ntesis con lo que obtenemos el ; y luego se e#ecuta la instruccin de escribir en pantalla.
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 1eamos una serie de llamadas a la funcin parseInt para ver lo que devuelve y entender un poco m$s la funcin.
document.write (parseInt("34"))
+evuelve el numero ?@ +evuelve el numero @? +evuelve el numero <; +evuelve el numero >?
Esta funcin se utili(a en la pr$ctica para un montn de cosas distintas en el mane#o con n4meros por e#emplo obtener la parte entera de un decimal.
document.write (parseInt("3.3""))
+evuelve el numero ?
&ambi!n es muy habitual su uso para saber si una variable es num!rica pues si le pasamos un texto a la funcin que no sea num!rico nos devolver$ 9a9 A9ot a 9umberB lo que quiere decir que 9o es un 94mero.
document.write (parseInt("desarrollowe%.com"))
Este mismo e#emplo es interesante con una modificacin pues si le pasamos una combinacin de letras y n4meros nos dar$ lo siguiente.
document.write (parseInt("1$&&3'"))
document.)rite AparseIntAC&D@ECBB +evuelve el numero 9a9 'omo se puede ver la funcin intenta convertir el string en n4mero y si no puede devuelve 9a9. &odos estos e#emplos un tanto inconexos sobre cmo traba#a parseInt los revisaremos m$s adelante en e#emplos m$s pr$cticos cuando tratemos el traba#o con formularios.
En la primera lnea asignamos a la variable miInteger el resultado de intentar convertir a entero el texto *?.>. 'omo este texto no se puede convertir a n4mero la funcin parseInt devuelve 9a9. "a segunda lnea comprueba si la variable anterior es 9a9 y como si que lo es devuelve un true.
mi#loat = parse#loat("4.+") is*a*(mi#loat)
En este e#emplo convertimos un texto a n4mero con decimales. El texto se convierte perfectamente porque corresponde con un n4mero. *l recibir un n4mero la funcin is9a9 devuelve un false.
Referencia: 1alidar entero en campo de formulario &enemos un &aller de Javascript muy interesante que ha sido reali(ado para afian(ar los conocimientos de estos captulos. 3e trata de un script para validar un campo de formulario de manera que sepamos seguro que dentro del campo hay siempre un n4mero entero. Puede ser muy interesante leerlo ahora ya que utili(amos las funciones is9a9AB y parseIntAB. 1er el taller
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Esperamos que los e#emplos vistos en este artculo hayan resultado interesantes. 9o obstante como habamos se:alado anteriormente existen bastantes otras funciones nativas en Javascript que debemos conocer pero que est$n asociadas a clases y ob#etos nativos Javascript. Pero antes de pasar a ese punto queremos ofrecer una peque:a gua b$sica para el traba#o con programacin orientada a ob#etos en Javascript.
Artculo por
En una variable que llamamos mi6b#eto asigno un nuevo Ane)B e#emplar de la clase mi'lase. "os par!ntesis se rellenan con los datos que necesite la clase para iniciali(ar el ob#eto si no hay que meter ning4n par$metro los par!ntesis se colocan vacos. En realidad lo que se hace cuando se crea un ob#eto es llamar al constructor de esa clase y el constructor es el encargado de crearlo e iniciali(arlo. 8ablaremos sobre esto m$s adelante.
Para llamar a los m!todos utili(amos una sintaxis similar pero poniendo al final entre par!ntesis los par$metros que pasamos a los m!todos. +el siguiente modo:
mi,%-eto.mi0etodo(parametro1 parametro!)
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 3i el m!todo no recibe par$metros colocamos los par!ntesis tambi!n pero sin nada dentro.
mi,%-eto.mi0etodo() Nota: 6bviamente el mundo de la programacin orientada a ob#etos en Javascript es mucho m$s amplio de lo que hemos visto en este artculo. *l menos con lo que hemos aprendido tenemos suficiente para encarar los artculos siguientes del /anual de programacin Javascript avan(ada.
En el siguiente artculo veremos una introduccin ob#etos nativos en Javascript y luego empe(aremos a verlos uno por uno de tal modo que podremos practicar todo lo que hemos visto hasta ahora sobre P66.
Artculo por
Nota: #as clases se escriben con la primera letra en ma$sculas% &iene que quedar claro que una clase es una especie de Cdeclaracin de caractersticas y funcionalidadesC de los ob#etos. +icho de otro modo las clases son descripciones de la forma y funcionamiento de los ob#etos. 'on las clases generalmente no se reali(a ning4n traba#o sino que se hace con los ob#etos que creamos a partir de las clases. 2na ve( comprendida la diferencia entre ob#etos y clases cabe se:alar que 3tring es una clase lo mismo que +ate. 3i queremos traba#ar con cadenas de caracteres o fechas necesitamos crear ob#etos de las clases 3tring y +ate respectivamente. 'omo sabemos Javascript es un lengua#e sensible a las may4sculas y las min4sculas y en este caso las clases, por convenci&n, siempre se escriben con la primera letra en ma$scula $ tambi'n la primera letra de las siguientes palabras si es que el nombre de la clase est$ compuesto de varias palabras. Por e#emplo si tuvieramos la clase de C*lumnos universitariosC se escribira con la F*F de alumnos y la F2F de universitarios en may4scula. *lumnos2niversitarios sera el nombre de nuestra supuesta clase.
8ay otros que pertenecen a este mismo con#unto los enumeramos aqu para que quede constancia de ellos pero no los vamos a tocar en captulos siguientes. (rra$ ya los hemos visto en captulos correspondientes al primer manual de Javascript. &ambi!n la clase Function lo hemos visto parcialmente al estudiar las funciones. 8ay otra clase Reg)*p que sirve para construir patrones que veremos tal ve( #unto con %unction cuando tratemos temas m$s avan(ados todava.
Nota: +so de ma$sculas $ minsculas% Ga que nos hemos parado anteriormente a hablar sobre el uso de may4sculas en ciertas letras de los nombre de las clases vamos a terminar de explicar la convencin que se lleva a cabo en Javascript para nombrar a los elementos. Para empe(ar cualquier variable se suele escribir en min4sculas aunque si este nombre de variable se compone de varias palabras se suele escribir en may4scula la primera letra de las siguientes palabras a la primera. Esto se hace as en cualquier tipo de variable o nombre menos en los nombres de las clases donde se escribe tambi!n en may4scula el primer caracter de la primera palabra. E#emplos: Number que es una clase se escribe con la primera en may4scula. Reg)*p que es el nombre de otra clase compuesto por dos palabras tiene la primera letras de las dos palabras en may4scula. mi,adena que supongamos que es un ob#eto de la clase 3tring se escribe con la primera letra en min4scula y la primera letra de la segunda palabra en may4scula. fec!a que supongamos que es un ob#eto de la clase +ate se escribe en min4sculas por ser un ob#eto. miFunci&n() que es una funcin definida por nosotros se acostumbra a escribir con min4scula la primera. 'omo decimos esta es la norma general para dar nombres a las variables clases ob#etos funciones etc. en Javascript. 3i la seguimos as no tendremos problemas a la hora de saber si un nombre en Javascript tiene o no alguna may4scula y adem$s todo nuestro traba#o ser$ m$s claro y f$cil de seguir por otros programadores o nosotros mismos en caso de retomar un cdigo una ve( pasado un tiempo.
Artculo por
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com lastInde*-f(carcter,desde) Husca la posicin de un car$cter ex$ctamente igual a como lo hace la funcin index6f pero desde el final en lugar del principio. El segundo par$metro indica el n4mero de caracteres desde donde se busca igual que en index6f. replace(substring.a.buscar,nuevoStr) Implementado en Javascript 7.< sirve para reempla(ar porciones del texto de un string por otro texto por e#emplo podramos uili(arlo para reempla(ar todas las apariciones del substring CxxxC por CyyyC. El m!todo no reempla(a en el string sino que devuelve un resultante de hacer ese reempla(o. *cepta expresiones regulares como substring a buscar. split(separador) Este m!todo slo es compatible con #avascript 7.7 en adelante. 3irve para crear un vector a partir de un 3tring en el que cada elemento es la parte del 3tring que est$ separada por el separador indicado por par$metro. substring(inicio,fin) +evuelve el substring que empie(a en el car$cter de inicio y termina en el car$cter de fin. 3i intercambiamos los par$metros de inicio y fin tambi!n funciona. 3implemente nos da el substring que hay entre el car$cter menor y el mayor. to#o/er,ase() Pone todas los caracteres de un string en min4sculas. to+pper,ase() Pone todas los caracteres de un string en may4sculas. toString() Este m!todo lo tienen todos los ob#etos y se usa para convertirlos en cadenas. 8asta aqu hemos visto los m!todos que nos ayudar$n a tratar cadenas. *hora vamos a ver otros m!todos que son menos 4tiles pero hay que indicarlos para que quede constancia de ellos. &odos sirven para aplicar estilos a un texto y es como si utili($semos etiquetas 8&/". 1eamos cmo. anc!or(name) 'onvierte en un ancla Asitio a donde dirigir un enlaceB una cadena de caracteres usando como el atributo name de la etiqueta I*J lo que recibe por par$metro. big() *umenta el tama:o de letra del string. Es como si coloc$semos en un string al principio la etiqueta IHIDJ y al final IKHIDJ. blin0() Para que parpadee el texto del string es como utili(ar la etiqueta IH"I9LJ. 3olo vale para 9etscape. bold() 'omo si utili($semos la etiqueta IHJ. fi*ed() Para utili(ar una fuente monoespaciada etiqueta I&&J. font,olor(color) Pone la fuente a ese color. 'omo utili(ar la etiqueta I%69& colorMelNcolorNindicadoJ. fontSi1e(tama2o) Pone la fuente al tama:o indicado. 'omo si utili($semos la etiqueta I%69&J con el atributo si(e. italics() Pone la fuente en cursiva. Etiqueta IIJ. lin0(url) Pone el texto como un enlace a la 25" indicada. Es como si utili($semos la etiqueta I*J con el atributo href indicado como par$metro. small() Es como utili(ar la etiqueta I3/*""J stri0e() 'omo utili(ar la etiqueta I3&5ILEJ que sirve para que el texto apare(ca tachado.
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com sub() *ctuali(a el texto como si se estuviera utili(ando la etiqueta I32HJ de subndice. sup() 'omo si utili($semos la etiqueta I32PJ de superndice.
Artculo por
Primero creamos dos variables una con el string a recorrer y otra con un string vaco donde guardaremos el resultado. "uego hacemos un bucle que recorre desde el primer hasta el pen4ltimo car$cter del string Futil(amos la propiedad length para conocer el n4mero de caracteres del stringF y en cada iteracin colocamos un car$cter del string seguido de un car$cter separador CFC. 'omo aun nos queda el 4ltimo car$cter por colocar lo ponemos en la siguiente lnea despu!s del bucle. 2tili(amos la funcin char*t para acceder a las posiciones del string. %inalmente imprimimos en la p$gina el resultado. Podemos ver el e#emplo en funcionamiento en una p$gina a parte.
"as dos primeras lneas sirven para declarar las variables que vamos a utili(ar e iniciali(ar el string a partir. En la siguiente lnea hallamos la posicin de la mitad del string. En las dos siguientes lneas es donde reali(amos el traba#o de poner en una variable la primera mitad del string y en la otra la segunda. Para ello utili(amos el m!todo substring pas$ndole como inicio y fin en el primer caso desde = hasta la mitad y en
10
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com el segundo desde la mitad hasta el final. Para finali(ar imprimimos las dos mitades con un salto de lnea entre ellas. Podemos ver el e#emplo en funcionamiento en una p$gina a parte. 2na ve( sabemos mane#ar los ob#etos de la clase string podemos pasar a ver otras de las clases nativas de Javascript como la clase +ate.
Artculo por
Para crear un ob#eto fecha con un da y hora distintos de los actuales tenemos que indicar entre par!ntesis el momento con que iniciali(ar el ob#eto. 8ay varias maneras de expresar un da y hora v$lidas por eso podemos construir una fecha gui$ndonos por varios esquemas. Estos son dos de ellos suficientes para crear todo tipo de fechas y horas.
mi#ec6a = new >ate(a?o mes dia 6ora minutos se(undos) mi#ec6a = new >ate(a?o mes dia)
"os valores que debe recibir el constructor son siempre num!ricos. 2n detalle el mes comien(a por = es decir enero es el mes =. 3i no indicamos la hora el ob#eto fecha se crea con hora ==:==:==. "os ob#etos de la clase +ate no tienen propiedades pero si un montn de m!todos vamos a verlos ahora. getDate() +evuelve el da del mes. getDa$() +evuelve el da de la semana. get3ours() 5etorna la hora. get inutes() +evuelve los minutos. get ont!() +evuelve el mes Aatencin al mes que empie(a por =B. getSeconds() +evuelve los segundos. get4ime() +evuelve los milisegundos transcurridos entre el da 7 de enero de 7OP= y la fecha correspondiente al ob#eto al que se le pasa el mensa#e.
11
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com get5ear() 5etorna el a:o al que se le ha restado 7O==. Por e#emplo para el 7OOE retorna OE para el <==E retorna 7=E. Este m!todo est$ obsoleto en 9etscape a partir de la versin 7.? de Javascript y ahora se utili(a get%ullGearAB. getFull5ear() 5etorna el a:o con todos los dgitos. 2sar este m!todo para estar seguros de que funcionar$ todo bien en fechas posteriores al a:o <===. setDate() *ctuali(a el da del mes. set3ours() *ctuali(a la hora. set inutes() 'ambia los minutos. set ont!() 'ambia el mes Aatencin al mes que empie(a por =B. setSeconds() 'ambia los segundos. set4ime() *ctuali(a la fecha completa. 5ecibe un n4mero de milisegundos desde el 7 de enero de 7OP=. set5ear() 'ambia el a:o recibe un n4mero al que le suma 7O== antes de colocarlo como a:o de la fecha. Por e#emplo si recibe OE colocar$ el a:o 7OOE. Este m!todo est$ obsoleto a partir de Javascript 7.? en 9etscape. *hora se utili(a set%ullGearAB indicando el a:o con todos los dgitos. setFull5ear() 'ambia el a:o de la fecha al n4mero que recibe por par$metro. El n4mero se indica completo e#: <==E o 7OOE. 2tili(ar este m!todo para estar seguros que todo funciona para fechas posteriores a <===. 'omo habr!is podido apreciar hay alg4n m!todo obsoleto por cuestiones relativas al a:o <===: setGearAB y getGearAB. Estos m!todos se comportan bien en Internet Explorer y no nos dar$ ning4n problema el utili(arlos. 3in embrago no funcionar$n correctamente en 9etscape por lo que es interesante que utilicemos en su lugar los m!todos get%ullGearAB y set%ullGearAB que funcionan bien en 9etscape e Internet Explorer.
Referencia: &e recomendamos un artculo sobre fechas que es especialmente pr$ctico para las personas que quieren mostrar la fecha actual con varios formatos distintos.
* continuacin para afian(ar todos estos conocimientos te recomendamos ver algunos e#emplos de traba#o con ob#etos de la clase +ate.
Artculo por
12
3i se desea se puede ver en funcionamiento este script en una p$gina a parte. 8ay que destacar un detalle antes de acabar y es que el n4mero del mes puede empe(ar desde =. Por lo menos en el 9etscape con el que reali(amos las pruebas empe(aba en = el mes. Por esta ra(n sumamos uno al mes que devuelve el m!todo get/onth. 8ay m$s detalles a destacar pues resulta que en 9etscape el m!todo get%ullGearAB devuelve los a:os trascurridos desde 7O== con lo que al obtener el a:o de una fecha de por e#emplo <==E indica que es el a:o 7=E. Para obtener el a:o completo tenemos a nuestra disposicin el m!todo get%ullGearAB que devolvera <==E del mismo modo en 9etscape e Internet Explorer. /ucha atencin pues al traba#o con fechas en distintas plataformas puesto que podra ser problem$tico el hecho de que nos ofre(can distintas salidas los m!todos de mane#o de fechas com siempre dependiendo de la marca y versin de nuestro navegador.
Referencia: 3e puede ver otro e#emplo de traba#o con la clase +ate en el taller 'alcular la edad en Javascript
Artculo por
13
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com nombre de la clase para acceder a sus propiedades y m!todos.
14
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ma*() 5etorna el mayor de < n4meros. min() 5etorna el menor de < n4meros. po/() 5ecibe dos n4meros como par$metros y devuelve el primer n4mero elevado al segundo n4mero. random() +evuelve un n4mero aleatorio entre = y 7. /!todo creado a partir de Javascript 7.7. round() 5edondea al entero m$s prximo. sin() +evuelve el seno de un n4mero con un $ngulo en radianes. s<rt() 5etorna la rai( cuadrada de un n4mero. tan() 'alcula y devuelve la tangente de un n4mero en radianes. E#emplo de utili(acin de la clase /ath 1amos a ver un sencillo e#emplo sobre cmo utili(ar m!todos y propiedaes de la clase /ath para calcular el seno y el coseno de < PI radianes Auna vuelta completaB. 'omo algunos de vosotros sabr!is el coseno de < PI radianes debe dar como resultado 7 y el seno =.
document.write (0at6.cos(! F 0at6./I)) document.write ("5%r=") document.write (0at6.sin(! F 0at6./I))
< PI radianes es el resultado de multiplicar < por el n4mero PI. Ese resultado es lo que recibe el m!todo cos y da como resultado 7. En el caso del seno el resultado no es exactamente = pero est$ aproximado con una exactitud de m$s de una millon!sima de fraccin. 3e escriben los el seno y coseno con un salto de lnea en medio para que quede m$s claro. Podemos ver el resultado de e#ecutar estas lneas de cdigo. *dem$s si deseamos profundi(ar en la clase /ath os recomiendo leer el artculo de crear un n4mero aleatorio. &ambi!n se hace uso de la clase /ath en el artculo enlace aleatorio. &odos en el &aller de Javascript.
Artculo por
15
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com El valor del ob#eto 9umber que se crea depende de lo que reciba el constructor de la clase 9umber. 'on estas reglas: F 3i el constructor recibe un n4mero entonces iniciali(a el ob#eto con el n4mero que recibe. 3i recibe un n4mero entrecomillado lo convierte a valor num!rico devolviendo tambi!n dicho n4mero. F +evuelve = en caso de que no reciba nada. F En caso de que reciba un valor no num!rico devuelve 9a9 que significa C9ot a 9umberC A9o es un n4meroB F 3i recibe false se iniciali(a a = y si recibe true se iniciali(a a 7. 3u funcionamiento se puede resumir en estos e#emplos.
var n1 = new *um%er() document.write(n1 + "5%r=") <<muestra un 0 var n! = new *um%er("6ola") document.write(n! + "5%r=") <<muestra *a* var n3 = new *um%er("1!3") document.write(n3 + "5%r=") <<muestra 1!3 var n4 = new *um%er("1!3asd3GHBITA") document.write(n4 + "5%r=") <<muestra *a* var n5 = new *um%er(1!345$) document.write(n5 + "5%r=") <<muestra 1!345$ var n$ = new *um%er(3alse) document.write(n$ + "5%r=") <<muestra 0 var n+ = new *um%er(true) document.write(n+ + "5%r=") <<muestra 1
"os dos e#emplos de este artculo se pueden ver en funcionamiento en una p$gina a parte.
16
Artculo por
+ependiendo de lo que reciba el constructor de la clase Holean el valor del ob#eto boleano que se crea ser$ verdadero o falso de la siguiente manera F Se iniciali1a a false cuando no pasas ning4n valor al constructor o si pasas una cadena vaca el n4mero = o la palabra false sin comillas. F Se iniciali1a a true cuando recibe cualquier valor entrecomillado o cualquier n4mero distinto de =. 3e puede comprender el funcionamiento de este ob#eto f$cilmente si examinamos unos e#emplos.
var %1 = new Moolean() document.write(%1 + "5%r=") <<muestra 3alse var %! = new Moolean("") document.write(%! + "5%r=") <<muestra 3alse var %!5 = new Moolean(3alse) document.write(%!5 + "5%r=") <<muestra 3alse var %3 = new Moolean(0) document.write(%3 + "5%r=") <<muestra 3alse var %35 = new Moolean("0") document.write(%35 + "5%r=") <<muestra true var %4 = new Moolean(3) document.write(%4 + "5%r=") <<muestra true var %5 = new Moolean("2ola") document.write(%5 + "5%r=") <<muestra true
17
Parte 3:
Eso era un constructor. 2tili(a la palabra this para declarar las propiedades y m!todos del ob#eto que se est$ construyendo. &his hace referencia al ob#eto que se est$ construyendo pues recordemos que a esta funcin la llamaremos para construir un ob#eto. * ese ob#eto que se est$ construyendo le vamos asignando valores en sus propiedades y tambi!n le vamos asignando nombres de funciones definidas para sus m!todos. *l construir un ob#eto t!cnicamente es lo mismo declarar una propiedad o un m!todo solo difiere en que a una propiedad le asignamos un valor y a un m!todo le asignamos una funcin.
18
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com tener alg4n m!todo como por e#emplo matricular al alumno.
"os valores de iniciali(acin los recibe el constructor como par$metros en este caso es slo el nombre y la edad porque el n4mero de matrcula no lo recibe un alumno hasta que es matriculado. Es por ello que asignamos a null la propiedad num/atrcula. En el siguiente artculo explicaremos cmo se pueden reali(ar m!todos y asociarlos a las clases que estamos definiendo.
Artculo por
"a funcin matricular recibe un n4mero de matrcula por par$metro y lo asigna a la propiedad num/atricula del ob#eto que recibe este m!todo. *s rellenamos el la propiedad del ob#eto que nos faltaba. 1amos a construir otro m!todo que imprime los datos del alumno.
3unction imprimete()8 document.write("*om%reD " + t6is.nom%re) document.write("5%r=BdadD " + t6is.edad) document.write("5%r=*Pmero de matr@culaD " + t6is.num0atricula) 9
Esta funcin va imprimiendo todas las propiedades del ob#eto que recibe el m!todo.
19
1emos que en las 4ltimas lneas asignamos a los m!todos los nombres de las funciones que contienen su cdigo.
3i lo deseamos podemos ver el script en funcionamiento en una p$gina a parte. 9o vamos a hablar m$s por el momento sobre cmo crear y utili(ar nuestros propios ob#etos pero en el futuro trataremos este tema con m$s profundidad y haremos alg4n e#emplo adicional.
20
Artculo por
Parte 4:
21
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 3i e#ecutamos esta sentencia en cualquier momento cambiamos el color de fondo de la p$gina a ro#o. 8ay que fi#arse en que la propiedad bg'olor tiene la C'C en may4scula. Es un error tpico equivocarse con las may4sculas y min4sculas en la #erarqua. 3i no lo escribimos bien no funcionar$ y en algunos casos ni siquiera dar$ un mensa#e de error. En esta p$gina definida con color de fondo blanco hemos cambiado esa propiedad luego con Javascript por lo que saldr$ con color de fondo ro#o.
52T0K= 52B)>= 5TITKB=/rue%a %(.olor5<TITKB= 5<2B)>= 5M,>A %(color=w6ite= 5script= document.%(.olor = "red" 5<script= 5<M,>A= 5<2T0K=
Podemos ver esta p$gina en marcha en una ventana a parte. En los e#emplos que hemos visto hasta ahora tambi!n hemos hecho uso de los ob#etos de la #erarqua del navegador. En concreto hemos utili(ado mucho el m!todo )riteAB del ob#eto document para escribir un texto en la p$gina.
document.write("Bl texto a escri%ir")
Artculo por
22
?erar<u@a de obAetos del navegador en ?avascript 7%6% Podra faltar por recoger alg4n ob#eto pero sirve perfectamente para hacerse una idea de cmo se organi(an los ob#etos en la #erarqua. 'omo se puede apreciar todos los ob#etos comien(an en un ob#eto que se llama )indo). Este ob#eto ofrece una serie de
23
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com m!todos y propiedades para controlar la ventana del navegador. 'on ellos podemos controlar el aspecto de la ventana la barra de estado abrir ventanas secundarias y otras cosas que veremos m$s adelante cuando expliquemos con detalle el ob#eto. *dem$s de ofrecer control el ob#eto )indo) da acceso a otros ob#etos como el documento A"a p$gina )eb que se est$ visuali(andoB el historial de p$ginas visitadas o los distintos frames de la ventana. +e modo que para acceder a cualquier otro ob#eto de la #erarqua deberamos empe(ar por el ob#eto )indo). &anto es as que #avascript entiende perfectamente que la #erarqua empie(a en )indo) aunque no lo se:alemos. En los e#emplos incluidos en el captulo anterior podamos haber escrito tambi!n las sentencias de acceso a la #erarqua empe(ando por el ob#eto )indo) de esta manera.
window.document.%(.olor = "red" window.document.write("Bl texto a escri%ir")
9o lo hicimos por que quedase m$s claro el cdigo y ahorrar algo de texto pero ahora ya sabemos que toda la #erarqua empie(a en el ob#eto )indo).
2tili(amos la propiedad length del array images para limitar el n4mero de iteraciones del bucle. "uego utili(amos el m!todo )riteAB del ob#eto document pas$ndole el valor de cada una de las propiedades src de cada imagen. Podemos ver una p$gina con varias im$genes donde se accede a sus propiedades con el bucle anterior. *hora vamos a ver el uso de otro array de ob#etos. En este caso vamos a acceder un poco m$s dentro de la #erarqua para llegar a la matri( elements de los ob#etos formulario que contiene cada uno de los elementos que componen el formulario. Para ello tendremos que acceder a un formulario de la p$gina al que podremos acceder por el array de formularios y dentro de !l a la propiedad elements que es otro array de ob#etos. Para cada elemento del formulario vamos a escribir su propiedad value que corresponde con la propiedad value que colocamos en 8&/".
24
Es un bucle muy parecido al que tenamos para recorrer las im$genes con la diferencia que ahora recorremos el vector de elements al que accedemos por la #erarqua de ob#etos pasando por el array de formularios en su posicin = que corresponde con el primer formulario de la p$gina. Para ver este e#emplo en funcionamiento tenemos una p$gina con un formulario donde se e#ecuta este recorrido a sus elementos. 'on esto hemos aprendido a movernos por la #erarqua de ob#etos con lo que podremos acceder a cualquier elemento del navegador o la p$gina. En adelante conoceremos con detalle cada uno de los ob#etos de la #erarqua empe(ando por el ob#eto )indo) y ba#ando por la #erarqua hasta verlos todos.
Artculo por
25
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com locationbar 6b#eto barra de direcciones de la ventana. AJavascript 7.<B menubar 6b#eto barra de men4s de la ventana. AJavascript 7.<B name 9ombre de la ventana. "o asignamos cuando abrimos una nueva ventana. opener 8ace referencia a la ventana de navegador que abri la ventana donde estamos traba#ando. 3e ver$ con detenimiento en el tratamiento de ventanas con Javascript. out!er3eig!t &ama:o en pixels del espacio de toda la ventana en vertical. Esto incluye las barras de despla(amiento botones etc. AJavascript 7.<B out!erBidt! &ama:o en pixels del espacio de toda la ventana en hori(ontal. Esto incluye las barras de despla(amiento. AJavascript 7.<B parent 8ace referencia a la ventana donde est$ situada el frame donde estamos traba#ando. "a veremos con detenimiento al estudiar el control de frames con Javascript. personalbar 6b#eto barra personal del navegador. AJavascript 7.<B self 1entana o frame actual. scrollbars 6b#eto de las barras de despla(amiento de la ventana. status &exto de la barra de estado. statusbar 6b#eto barra de estado del navegador. AJavascript 7.<B toolbar 6b#eto barra de herramientas. AJavascript 7.<B top 8ace referencia a la ventana donde est$ situada el frame donde estamos traba#ando. 'omo la propiedad parent. /indo/ 8ace referencia a la ventana actual igual que la propiedad self. 1amos a ver un e#emplo de utili(acin de la propiedad status del ob#eto )indo). Esta propiedad sirve para escribir un texto en la barra de estado del navegador Ala barra de deba#o de la ventanaB. En este e#emplo hemos tenido que adelantarnos un poco en la marcha del manual pues utili(amos un mane#ador de eventos y no hemos visto todava lo que son. En concreto utili(amos el mane#ador de eventos onclic- que sirve para e#ecutar sentencias Javascript cuando el usuario pulsa un elemento de la p$gina. "os mane#adores de eventos se colocan en etiquetas 8&/" en nuestro caso lo colocamos en un botn de formulario. "as sentencias Javascript asociadas al evento onclic- del botn se e#ecutar$n cuando pulsemos el botn. 1eamos ya el cdigo que hace que se cambie el texto de la barra de estado cuando pulsemos un botn.
53orm= 5input tEpe="Mutton" value="/ulsameU" onclicV="window.status=W2ola a todo el mundoUW"= 5<3orm=
3implemente asignamos un texto a la propiedad status del ob#eto )indo). El texto que colocamos en la barra de estado est$ escrito entre comillas simples porque estamos escribiendo dentro de unas comillas dobles.
26
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Podemos ver una p$gina a parte con este e#emplo.
Artculo por
27
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 'omo si puls$semos el botn de imprimir del navegador. AJavascript 7.<B prompt(pregunta,iniciali1acion.de.la.respuesta) /uestra una ca#a de di$logo para pedir un dato. +evuelve el dato que se ha escrito. release)vents(eventos) +e#a de capturar eventos del tipo que se indique por par$metro. AJavascript 7.<B resi1e"$(pi*els(nc!o,pi*els(lto) 5edimensiona el tama:o de la ventana a:adiendo a su tama:o actual los valores indicados en los par$metros. El primero para la altura y el segundo para la anchura. *dmite valores negativos si se desea reducir la ventana. AJavascript 7.<B resi1e4o(pi*els(nc!o,pi*els(lto) 5edimensiona la ventana del navegador para que ocupe el espacio en pixels que se indica por par$metro AJavascript 7.<B route)vent() Enruta un evento por la #erarqua de eventos. AJavascript 7.<B scroll(pi*els=,pi*els5) 8ace un scroll de la ventana hacia la coordenada indicada por par$metro. Este m!todo est$ desaconse#ado pues ahora se debera utili(ar scroll&oABAJavascript 7.7B scroll"$(pi*els=,pi*els5) 8ace un scroll del contenido de la ventana relativo a la posicin actual. AJavascript 7.<B scroll4o(pi*els=,pi*els5) 8ace un scroll de la ventana a la posicin indicada por el par$metro. Este m!todo se tiene que utili(ar en lugar de scroll. AJavascript 7.<B setInterval() +efine un script para que sea e#ecutado indefinidamente en cada intervalo de tiempo. AJavascript 7.<B set4imeout(sentencia,milisegundos) +efine un script para que sea e#ecutado una ve( despu!s de un tiempo de espera determinado. stop() 'omo pulsar el botn de stop de la ventana del navegador. AJavascript 7.<B Para ilustrar un poco me#or el funcionamiento de alguno de estos m!todos Flos m$s extra:osF hemos creado una p$gina )eb que los utili(a. El cdigo de la p$gina se muestra a continuacin y tambi!n podemos ver la p$gina en marcha.
53orm= 5input 5%r= 5%r= 5input 5%r= 5%r= 5input 5%r= 5%r= 5input 5%r= 5%r= 5input 5%r= 5%r= 5input tEpe="%utton" value="Jentana de %PsRueda (1olo *etscape)" on.licV="window.3ind()"= tEpe="%utton" value="0over la ventana 10 derec6a 10 a%a-o" on.licV="moveME(10 tEpe="%utton" value="0over la ventana al punto (100 10)" on.licV="moveTo(100 tEpe="%utton" value="Imprimir esta pC(ina" on.licV="print()"= tEpe="%utton" value=")umenta la ventana 10 anc6o 10 lar(o" on.licV="resiNeME(10 10)"= !00)"= 10)"= 10)"=
5%r= 5%r= 5input tEpe="%utton" value="1croll arri%a del todo" on.licV="scroll(0 0)"= 5%r= 5%r= 5input tEpe="%utton" value="1croll arri%a 10 pixels" on.licV="scrollME(0 710)"= 5<3orm=
Estos e#emplos son muy simples aunque poco pr$cticos. Qnicamente se trata de una serie de botones que al pulsarlos
28
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com llaman a otros tantos m!todos del ob#eto )indo). En el atributo onclic- de la etiqueta del botn se indican las sentencias Javascript que queremos que se e#ecuten cuando se pulsa sobre dicho botn. En el captulo siguiente veremos otros e#emplos reali(ados con m!todos del ob#eto )indo) de Javascript un poco m$s detallados.
Artculo por
Este script muestra una ca#a de di$logo confirm y luego muestra en otra ca#a de di$logo alert el contenido de la variable que devolvi la ca#a de di$logo. 9uevamente podemos ver el funcionamiento de este script si accedemos a esta p$gina a parte.
3i nos fi#amos en la ca#a prompt veremos que recibe dos par$metros. El segundo era el texto por defecto que sale en la ca#a como respuesta. "o hemos de#ado como un string vaco para que no salga nada como texto por defecto.
29
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Podemos ver este 4ltimo script en funcionamiento en una p$gina a parte. 8asta aqu los e#emplos de los m!todos del ob#eto )indo). +e todos modos en el resto del manual tendremos ocasin de ver cmo traba#ar con muchas propiedades y m!todos de este ob#eto.
Artculo por
30
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com From 2n formulario de la p$gina. 3e accede por su nombre. forms arra$ 2n array con todos los formularios de la p$gina. ids Para acceder a estilos '33. AJavascript 7.<B Image 2na imagen de la p$gina )eb. 3e accede por su nombre. AJavascript 7.7B images arra$ 'ada una de las im$genes de la p$gina introducidas en un array. AJavascript 7.7B last odified "a fecha de 4ltima modificacin del documento. lin0,olor El color de los enlaces. #in0 2n enlace de los de la p$gina. 3e accede por su nombre. lin0s arra$ 2n array con cada uno de los enlaces de la p$gina. location "a 25" del documento que se est$ visuali(ando. Es de solo lectura. referrer "a p$gina de la que viene el usuario. tags Estilos definidos a las etiquetas de 8&/" en la p$gina )eb. AJavascript 7.<B title El titulo de la p$gina. +R# "o mismo que location pero es aconse#able utili(ar location ya que 25" no existe en todos los navegadores. vlin0,olor El color de los enlaces visitados.
Artculo por
31
Primero definimos una funcin que ser$ la encargada de cambiar el color y luego tres botones que llamar$n a la funcin cuando sean pulsados pas$ndole el color como par$metro. Podemos ver el e#emplo en marcha.
*hora vamos a hacer una funcin que modifica el ttulo de la p$gina asign$ndole el texto que le llegue por par$metro.
3unction cam%iaTitulo(texto)8 document.title = texto 9
'omo en el e#emplo anterior vamos a crear varios botones que llamen a la funcin pas$ndole distintos textos que se colocar$n en el ttulo de la p$gina.
53orm= 5input tEpe="Mutton" value="Titulo = 2ola a todos" onclicV="cam%iaTitulo(W2ola a todosW)"= 5input tEpe="Mutton" value="Titulo = Mienvenidos a mi pC(ina we%" onclicV="cam%iaTitulo(WMienvenidos a mi pC(ina we%W)"= 5input tEpe="Mutton" value="Titulo = 0Cs dias Rue lon(aniNas" onclicV="cam%iaTitulo(W0Cs dias Rue lon(aniNasW)"= 5<3orm=
32
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com getSelection() +evuelve un string que contiene el texto que se ha seleccionado. 3lo funciona en 9etscape. !andle)vent() Invocas el mane#ador de eventos del elemento especificado. open() *bre el flu#o del documento. release)vents() "iberar los eventos capturados del tipo que se especifique envi$ndolos a los ob#etos siguientes en la #erarqua. route)vent() Pasa un evento capturado a trav!s de la #erarqua de eventos habitual. /rite() Escribe dentro de la p$gina )eb. Podemos escribir etiquetas 8&/" y texto normal. /riteln() Escribe igual que el m!todo )riteAB aunque coloca un salto de lnea al final. "os eventos de document sirven principalmente para controlar dos cosas. 2n grupo nos ofrece una serie de funciones para el control de los documentos como escribir abrirlos y cerrarlos. "os veremos en el captulo siguiente que habla sobre el control del flu#o de escritura del documento. El otro grupo ofrece herramientas para el control de los eventos en el documento y lo veremos m$s adelante cuando tratemos con detenimiento el tema de eventos. 3e nos queda un poco suelto el m!todo get3electionAB que slo funciona en los navegadores de 9etscape y por tanto no resulta muy 4til para aplicaciones que deseemos que sean compatibles en todos los sistemas. *un as haremos el e#emplo sobre este m!todo ya que los otros los vamos a ver en siguientes captulos. El e#emplo consiste en una p$gina que tiene un poco de texto y un botn. En la p$gina podremos seleccionar algo de texto y luego apretar el botn que llama a una funcin que muestra en una ca#a alert el texto que se ha seleccionado. El cdigo es el siguiente:
56tml= 56ead= 5title=Iescatar lo seleccionado5<title= 5script lan(ua(e="Qava1cript"= 3unction mostrar1eleccionado()8 alert("2as seleccionadoDn" + document.(et1election()) 9 5<script= 5<6ead= 5%odE= 561=Iescatar lo seleccionado5<61= 5%r= 53orm= 5input tEpe="%utton" value="pulsameU" on.licV="mostrar1eleccionado()"= 5<3orm= 1elecciona cualRuier texto de la pC(ina E pulsa so%re el %otYn. 5<%odE= 5<6tml=
3e puede ver en funcionamiento el script en una p$gina aparte aunque slo funcionar$ en 9etscape e Internet Explorer dar$ un error.
Artculo por
33
8ay un mati( que dar a que no se puede escribir en la p$gina cuando ya est$ cerrado el flu#o. En realidad si que se puede pero necesitamos abrir el flu#o otra ve( para escribir en la p$gina tanto es as que aunque nosotros no lo abramos explcitamente Javascript se encargar$ de ello. "o que tiene que quedar claro es que si hacemos un document.)riteAB el flu#o tiene que estar abierto y si no lo est$ se abrir$. El problema de abrir el flu#o de escritura del documento una ve( ya est$ escrita la p$gina es que se borra todo su contenido. Para que quede claro vamos a hacer un script para escribir en la p$gina una ve( !sta ha sido cargada. 3implemente necesitamos un botn y al pulsarlo e#ecutar el m!todo )riteAB del ob#eto document.
53orm= 5I*/'T tEpe=%utton value=escri%ir onclicV="window.document.write(W6olaW)"= 5<3orm=
3i nos fi#amos en el mane#ador de eventos onclic- hemos colocado la #erarqua de ob#etos desde el principio es decir empe(ando por el ob#eto )indo). Esto es porque hay algunos navegadores que no sobreentienden el ob#eto )indo) en las sentencias escritas en los mane#adores de eventos. Podemos ver el e#emplo en funcionamiento. El resultado de la e#ecucin puede variar de un navegador a otro pero en cualquier caso se borrar$ la p$gina que se est$ e#ecutando.
34
1emos que ahora no escribimos las sentencias dentro del mane#ador porque cuando hay m$s de una sentencia queda m$s claro poner una llamada a una funcin y en la funcin colocamos las sentencias que queramos. "as sentencias del e#emplo anterior que cubren la apertura escritura y cierre del documento. 3e pueden ver en marcha aqu.
Artculo por
Parte $:
35
+e similar manera accedemos a los elementos de un formulario que dependen del ob#eto form. 7. * partir del nombre del ob#eto asignado con el atributo 9*/E de 8&/". <. /ediante la matri( de elementos del ob#eto form con el ndice del elemento al que queremos acceder. Podramos acceder al campo 7 del anterior formulario de dos maneras. 'on su nombre lo haramos as.
document.31.campo1
o a partir del array de elementos. document.f7.elementsR=S Autili(amos el ndice = porque es el primer elemento y en Javascript los arrays empie(an por =.B 3i deseamos acceder al segundo campo del formulario escribiramos una de estas dos cosas:
document.31.campo! document.31.elementsS1T
recordamos que tambi!n podemos acceder a un fomulario por el array de forms indicando el ndice del formulario al que acceder. +e este modo el acceso al campo< sera el siguiente:
document.3ormsS0T.campo! document.3ormsS0T.elementsS1T
En estos casos hemos supuesto que este formulario es el primero que hay escrito en el cdigo 8&/" por eso accedemos a !l con el ndice =. Esperamos que haya quedado claro el acceso a formularios y sus campos. Pasaremos entonces sin m$s a un e#emplo para practicar todo esto.
Artculo por
36
/ediante una funcin vamos a acceder a los campos del formulario para recoger los operandos en dos variables. "os campos de texto tienen una propiedad llamada value que es donde podemos obtener lo que tienen escrito en ese momento. /as tarde nos ayudaremos de la funcin evalAB para reali(ar la operacin. Pondremos por 4ltimo el resultado en el campo de texto creado en tercer lugar utili(ando tambi!n la propiedad value del campo de texto. * la funcin que reali(a el c$lculo Aque podemos ver a continuacinB la llamamos apretando los botones de cada una de las operaciones. +ichos botones se pueden ver en el formulario y contienen un atributo onclic- que sirve para especificar las sentencias Javascript que deseamos que se e#ecuten cuando el usuario pulse sobre !l. En este caso la sentencia a e#ecutar es una llamada a la funcin calculaAB pasando como par$metro el smbolo u operador de la operacin que deseamos reali(ar. El
"a funcin evalAB recordamos que reciba un string y lo e#ecutaba como una sentencia Javascript. En este caso va a recibir un n4mero que concatenado a una operacin y otro n4mero ser$ siempre una expresin aritm!tica que evalAB solucionar$ perfectamente. Podemos ver el e#emplo de la calculadora en funcionamiento. El acceso a otros elementos de los formularios se hace de manera parecida en cuanto respecta a la #erarqua de ob#etos aunque como cada elemento tiene sus particularidades las cosas que podremos hacer con ellos diferir$n un poco. "o veremos un poco m$s adelante.
Artculo por
37
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com El n4mero de campos del formulario. met!od El m!todo por el que mandamos la informacin. 'orresponde con el atributo /E&86+ del formulario. name El nombre del formulario que corresponde con el atributo 9*/E del formulario. target "a ventana o frame en la que est$ dirigido el formulario. 'uando se submita se actuali(ar$ la ventana o frame indicado. 'orresponde con el atributo target del formulario.
6 cambiar el target para submitir un formulario en una posible ventana secundaria llamada miNventana.
document.mi#ormulario.tar(et = "mi;ventana"
9os fi#amos en que no hay botn de submit sino un botn normal con una llamada a una funcin que podemos ver a continuacin.
3unction valida1u%mite()8 i3 (document.mi#ormulario.campo1.value == "") alert(">e%e rellenar el 3ormulario") else document.mi#ormulario.su%mit() 9
En la funcin se comprueba si lo que hay escrito en el formulario es un string vaco. 3i es as se muestra un mensa#e de alerta que informa que se debe rellenar el formulario. En caso de haya algo en el campo de texto submite el formulario utili(ando el m!todo submit del ob#eto form.
38
Artculo por
39
El campo hidden slo tiene algunas de las propiedades de los campos de texto. En concreto tiene la propiedad value y las propiedades que son comunes de todos los campos de formulario: name from y type que ya se describieron para los campos de texto.
Artculo por
40
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com "os chec-box se consiguen con la etiqueta II9P2& typeMchec-boxJ. 'on el atributo 9*/E de la etiqueta II9P2&J le podemos dar un nombre para luego acceder a ella con #avascript. 'on el atributo '8E'LE+ indicamos que el campo debe aparecer chequeado por defecto. 'on Javascript a partir de la #erarqua de ob#etos del navegador tenemos acceso al chec-box que depende del ob#eto form del formulario donde est$ incluido.
41
3e consiguen con la etiqueta II9P2& typeMradioJ. 'on el atributo 9*/E de la etiqueta II9P2&J les damos un nombre para agrupar los radio button y que slo se pueda elegir una opcin entre varias. 'on el atributo value indicamos el valor de cada uno de los radio buttons. El atributo chec-ed nos sirve para indicar cu$l de los radio butons tiene que estar seleccionado por defecto.
Referencia: Explicamos en detalle la creacin de botones de radio en nuestro manual de 8&/" en el captulo 6tros elementos de formularios.
'uando en una p$gina tenemos un con#unto de botones de radio se crea un ob#eto radio por cada uno de los botones. "os ob#etos radio dependen del formulario y se puede acceder a ellos por el array de elements sin embargo tambi!n se crea un array con los botones de radio. Este array depende del formulario y tiene el mismo nombre que los botones de radio.
42
Primero podemos fi#arnos en el formulario y en la lista de botones de radio. &odos se llaman CcolorinC as que est$n asociados en un mismo grupo. *dem$s vemos que el atributo value de cada botn cambia. &ambi!n vemos un botn aba#o del todo. 'on esta estructura de formulario tendremos un array de elements de O elementos los ; botones de radio y el botn de aba#o. *dem$s tendremos un array de botones de radio que se llamar$ colorn y depende del formulario accesible de esta manera.
document.3orm.colorin
Este array tiene en cada posicin uno de los botones de radio. *s en la posicin = est$ el botn del color blanco en la posicin 7 el del color ro#o... Para acceder a esos botones de radio lo hacemos con su ndice.
document.3colores.colorinS0T
3i queremos acceder por e#emplo a la propiedad value del 4ltimo botn de radio escribimos lo siguiente.
document.3colores.colorinS+T.value
"a propiedad length del array de radios nos indica el n4mero de botones de radio que forman parte del grupo.
document.3colores.colorin.len(t6
43
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com En este caso la propiedad length valdr$ ;. 'on estas notas podremos entender m$s o menos bien la funcin que se encarga de encontrar el radio button seleccionado y cambiar el color de fondo de la p$gina. 3e define una variable en la que introduciremos el ndice del radio button que tenemos seleccionado. Para ello vamos recorriendo el array de botones de radio hasta que encontramos el que tiene su propiedad chec-ed a true. En ese momento salimos del bucle con lo que la variable i almacena el ndice del botn de radio seleccionado. En la 4ltima lnea cambiamos el color de fondo a lo que hay en el atributo value del radio button seleccionado. Podemos ver ese e#emplo en funcionamiento.
Referencia: 3i deseamos profundi(ar el el control de botones de radio podemos acceder a un taller relacionado: Inhibir radio button con Javascript
Artculo por
2no de estos elementos se puede obtener utili(ando la etiqueta I3E"E'&J dentro de un formulario. * la etiqueta le podemos a:adir un atributo para darle el nombre 9*/E para luego acceder a ese campo mediante Javascript. Para expresar cada una de las posibles opciones del campo select utili(amos una etiqueta I6P&I69J a la que le introducimos un atributo 1*"2E para expresar su valor. El texto que colocamos despu!s de la etiqueta I6P&I69J sirve como etiqueta de esa opcin es el texto que ve el usuario asociado a esa opcin.
44
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com blur() Para retirar el foco de la aplicacin de ese elemento de formulario. focus() Para poner el foco de la aplicacin. -bAeto option &enemos que pararnos a ver tambi!n este ob#eto para entender bien el campo select. 5ecordamos que las option son las distintas opciones que tiene un select expresadas con la etiqueta I6P&I69J.
*hora vamos a ver una funcin que recoge las propiedades m$s significativas del campo select y las presenta en una ca#a alert.
3unction dime/ropiedades()8 var texto texto = "Bl numero de opciones del selectD " + document.3ormul.mi1elect.len(t6 var indice = document.3ormul.mi1elect.selectedIndex texto += "nIndice de la opcion esco(idaD " + indice var valor = document.3ormul.mi1elect.optionsSindiceT.value texto += "nJalor de la opcion esco(idaD " + valor var textoBsco(ido = document.3ormul.mi1elect.optionsSindiceT.text texto += "nTexto de la opcion esco(idaD " + textoBsco(ido alert(texto) 9
45
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Esta funcin crea una variable de texto donde va introduciendo cada una de las propiedades del select. "a primera contiene el valor de la propiedad length del select la segunda el ndice de la opcin seleccionada y las dos siguientes contienen el valor y el texto de la opcin seleccionada. Para acceder a la opcin seleccionada utili(amos el array options con el ndice recogido en las segunda variable. Podemos ver el e#emplo en funcionamiento aqu. Podemos ver un e#emplo m$s practico sobre qu! se puede hacer con un campo select en el reporta#e de cmo hacer un navegador desplegable con Javascript.
3in embargo esta propiedad slo est$ presente en navegadores Internet Explorer por lo que es recomendable acceder utili(ando el vector de options con el ndice de la posicin seleccionada si deseamos que la p$gina sea compatible con todos los navegadores. 8emos querido a:adir este punto para que si alguna ve( utili(amos o vemos utili(ar este m!todo de acceso sepamos su pega y porque es me#or utili(ar el vector de options.
Artculo por
2n campo textarea se consigue con la etiqueta I&ET&*5E*J. 'on el atributo name le podemos dar un nombre para acceder al campo textarea mediante Javascript. 6tros atributos interesantes son cols y ro)s que sirven para indicar la anchura y altura del campo textarea en caracteres cols indica el n4mero de columnas y ro)s el de filas. aunque no se puede acceder a ellos con Javascript. El valor por defecto de un campo textarea se coloca entre las etiquteta I&ET&*5E*J y su correspondiente cierre.
46
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com .ue contiene el texto que hay escrito en el textarea. *dem$s tiene las conocidas propiedades de elementos de formulario form name y type.
El e#emplo funcionando se puede ver en una p$gina independiente. Para quien desee profundi(ar tenemos un artculo interesante que ampla el e#emplo anterior. 3e trata de una cuenta de los caracteres del textarea a la ve( que se est$ escribiendo dentro del campo. 3e reali(a gracias al tratamiento de eventos. 3e puede ver el artculo en la direccin http:KK))).desarrollo)eb.comKarticulosK7?@;.php
Artculo por
47
Parte ':
(ventos en Javascript
os e'entos son la base de la interacti'idad/ de modo $ue en este apartado 'eremos c#mo hacer p(ginas $ue respondan a las acciones del usuario. En )a'ascript podemos e%ecutar c#digo como respuesta a e'entos/ $ue son distintos tipos de acciones $ue el 'isitante puede realizar sobre la p(gina o sobre sus elementos.
3e coloca un atributo nuevo en la etiqueta que tiene el mismo nombre que el evento en este caso onclic-. El atributo se iguala a las sentencias Javascript que queremos que se e#ecuten al producirse el evento. 'ada elemento de la p$gina tiene su propia lista de eventos soportados vamos a ver otro e#emplo de mane#o de eventos esta ve( sobre un men4 desplegable en el que definimos un comportamiento cuando cambiamos el valor seleccionado.
51BKB.T onc6an(e="window.alert(W.am%iaste la selecciYnW)"= 5,/TI,* value="opcion1"=,pcion 1 5,/TI,* value="opcion!"=,pcion ! 5<1BKB.T=
En este e#emplo cada ve( que se cambia la opcin muestra una ca#a de alerta. Podemos verlo en una p$gina aparte. +entro de los mane#adores de eventos podemos colocar tantas instrucciones como deseemos pero siempre separadas por punto y coma. "o habitual es colocar una sola instruccin y si se desean colocar m$s de una se suele crear una funcin con
48
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com todas las instrucciones y dentro del mane#ador se coloca una sola instruccin que es la llamada a la funcin. 1amos a ver cmo se colocaran en un mane#ador varias instrucciones.
5input tEpe=%utton value=/ulsame onclicV="x=304 window.alert(x)4 window.document.%(.olor = WredW"=
3on instrucciones muy simples como asignar a x el valor ?= hacer una ventana de alerta con el valor de x y cambiar el color del fondo a ro#o. Podemos ver el e#emplo en una p$gina aparte. 3in embargo tantas instrucciones puestas en un mane#ador quedan un poco confusas habra sido me#or crear una funcin as.
5script= 3unction e-ecutaBvento,nclicV()8 x = 30 window.alert(x) window.document.%(.olor = WredW 9 5<script= 5#,I0= 5input tEpe=%utton value=/ulsame onclicV="e-ecutaBvento,nclicV()"= 5<#,I0=
*hora utili(amos m$s texto para hacer lo mismo pero seguro que a la mayora les parece m$s claro este segundo e#emplo. 3i se desea se puede ver esta 4ltima p$gina en una ventana aparte
onabort Este evento se produce cuando un usuario detiene la carga de una imagen ya sea porque detiene la carga de la p$gina o porque reali(a una accin que la detiene como por e#emplo irse de la p$gina. Javascript 7.7 onblur
49
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 3e desata un evento onblur cuando un elemento pierde el foco de la aplicacin. El foco de la aplicacin es el lugar donde est$ situado el cursor por e#emplo puede estar situado sobre un campo de texto una p$gina un botn o cualquier otro elemento. Javascript 7.= onc!ange 3e desata este evento cuando cambia el estado de un elemento de formulario en ocasiones no se produce hasta que el usuario retira el foco de la aplicacin del elemento. Javascript 7.= Javascript 7.= onclic0 3e produce cuando se da una pulsacin o clic al botn del ratn sobre un elemento de la p$gina generalmente un botn o un enlace. Javascript 7.= ondragdrop 3e produce cuando un usuario suelta algo que haba arrastrado sobre la p$gina )eb. Javascript 7.< onerror 3e produce cuando no se puede cargar un documento o una imagen y esta queda rota. Javascript 7.7 onfocus El evento onfocus es lo contrario de onblur. 3e produce cuando un elemento de la p$gina o la ventana ganan el foco de la aplicacin. Javascript 7.= on0e$do/n Este evento se produce en el instante que un usuario presiona una tecla independientemente que la suelte o no. 3e produce en el momento de la pulsacin. Javascript 7.< on0e$press 6curre un evento on-eypress cuando el usuario de#a pulsada una tecla un tiempo determinado. *ntes de este evento se produce un on-eydo)n en el momento que se pulsa la tecla.. Javascript 7.< on0e$up 3e produce cuando el usuario de#a de apretar una tecla. 3e produce en el momento que se libera la tecla. Javascript 7.< onload Este evento se desata cuando la p$gina o en Javascript 7.7 las im$genes ha terminado de cargarse. Javascript 7.= onmousedo/n 3e produce el evento onmousedo)n cuando el uuario pulsa sobre un elemento de la p$gina. onmousedo)n se produce en el momento de pulsar el botn se suelte o no. Javascript 7.< onmousemove 3e produce cuando el ratn se mueve por la p$gina. Javascript 7.< onmouseout 3e desata un evento onmuoseout cuando el puntero del ratn sale del $rea ocupada por un elemento de la p$gina. Javascript 7.7 onmouseover Este evento se desata cuando el puntero del ratn entra en el $rea ocupada por un eolemento de la p$gina. Javascript 7.=
50
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com onmouseup Este evento se produce en el momento que el usuario suelta el botn del ratn que previamente haba pulsado. Javascript 7.< onmove Evento que se e#ecuta cuando se mueve la ventana del navegador o un frame. Javascript 7.< onresi1e Evento que se produce cuando se redimensiona la ventana del navegador o el frame en caso de que la p$gina los tenga. Javascript 7.< onreset Este evento est$ asociado a los formularios y se desata en el momento que un usuario hace clic en el botn de reset de un formulario. Javascript 7.7 onselect 3e e#ecuta cuando un usuario reali(a una seleccin de un elemento de un formulario. Javascript 7.= onsubmit 6curre cuando el visitante apreta sobre el botn de enviar el formulario. 3e e#ecuta antes del envo propiamente dicho. Javascript 7.= onunload *l abandonar una p$gina ya sea porque se pulse sobre un enlace que nos lleve a otra p$gina o porque se cierre la ventana del navegador se e#ecuta el evento onunload. Javascript 7.=
Artculo por
51
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Este e#emplo contiene una imagen que tiene el evento onabort asignado para que se e#ecute una funcin en caso de que la imagen no llegue a cargarse. "a funcin informa al usuario de que la imagen no se ha llegado a cargar y le pregunta si desea cargarla otra ve(. 3i el usuario contesta que s entonces se pone a descargar la imagen otra ve(. 3i dice que no no hace nada. "a pregunta se hace con una ca#a confirm de Javascript.
56tml= 56ead= 5title=Bvento ona%ort5<title= 5script= 3unction pre(untar1e(uir()8 respuesta = con3irm ("2as detenido la car(a de la pC(ina E 6aE una ima(en Rue no estCs viendo.n[>eseas car(ar la ima(en\") i3 (respuesta) document.im(1.src = "6ttpD<<ipa(inate.iespana.es<ipa(inate<desarrollo(rande.(i3" 9 5<script= 5<6ead= 5%odE= 5im( name=im(1 src="6ttpD<<ipa(inate.iespana.es<ipa(inate<desarrollo(rande.(i3" widt6=500 6ei(6t=45" alt="Ima(en Rue pesa 115]" %order="0" ona%ort="pre(untar1e(uir()"= 5%r= /ulsa el %otYn de parar la car(a de la pC(ina E se pondrC en marc6a el evento onerror 5<%odE= 5<6tml=
Este e#emplo estara bien si siempre se detuviese la carga por pulsar el botn de cancelar pero si lo que pasa es que el usuario ha cancelado por irse a otra p$gina a trav!s de un enlace saldr$ la ca#a de confirmacin pero no ocurrir$ nada independientemente de lo que se responda y el navegante se marchar$ irremediablemente a la nueva p$gina. 3e puede ver en una p$gina aparte.
Artculo por
52
<<.omprue%o si es un valor numOrico i3 (is*a*(valor)) 8 <<entonces (no es numero) devuelvo el valor cadena vacia return "" 9else8 <<Bn caso contrario (1i era un nPmero) devuelvo el valor return valor 9
3unction comprue%aJalidoBntero()8 enteroJalidado = validarBntero(document.31.numero.value) i3 (enteroJalidado == "")8 <<si era la cadena vac@a es Rue no era vClido. Ko aviso alert (">e%e escri%ir un enteroU") <<selecciono el texto document.31.numero.select() <<coloco otra veN el 3oco document.31.numero.3ocus() 9else document.31.numero.value = enteroJalidado 9 5<script= 5<6ead= 5%odE= 53orm name=31= Bscri%a un nPmero enteroD 5input tEpe=text name=numero siNe=" value="" on%lur="comprue%aJalidoBntero()"= 5<3orm= 5<%odE= 5<6tml=
*l salirse del campo de texto AonblurB se e#ecuta comprueba1alidoEnteroAB que utili(a la funcin validarEntero explicada en un taller de Javascript. 3i el valor devuelto por la funcin no es el de un entero en este caso se recibira una cadena vaca muestra un mensa#e en una ca#a alert selecciona el texto escrito en la ca#a y coloca el foco de la aplicacin en la ca#a de texto para que el usuario coloque otro valor. 8asta que el visitante no escriba un n4mero entero en el campo de texto el foco de la aplicacin permanecer$ en el campo y continuar$ recibiendo mensa#es de error. Podemos ver este e#emplo en marcha en una p$gina aparte.
Artculo por
-.*.- &ontinuacin del e emplo de onblur? para validar varios campos de te<to.
6acemos un ejemplo de validacin de campos de un formulario utilizando como base el evento onblur y solucionando un problema de bucle infinito. 8emos visto en el e#emplo del m!todo onblur relatado anteriormente una posible t!cnica para comprobar los datos de un campo de formulario. *hora vamos a ver cmo evolucionar esta t!cnica si tenemos m$s de un campo a validar dado que se puede complicar bastante el problema.
53
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com +e hecho antes de leer nuestra solucin propuesta creo que sera un buen e#ercicio a reali(ar por el lector la pr$ctica de hacer ese mismo e#emplo para dos campos y traba#ar un poco con la p$gina a ver si encontramos alg4n problema. /uy probablemente nos encontraremos con un curioso bucle infinito que nos va a dar m$s de un quebradero de cabe(a para solucionarlo. En la pr$ctica el lector puede intentar validar un n4mero entero y un cdigo postal. Para validar un cdigo postal necesitamos comprobar que es una cadena de texto compuesta por E caracteres y todos son enteros por lo menos para los cdigos en Espa:a. Por si alguien lo quiere intentar la funcin para validar un cdigo postal sera algo parecido a esto:
3unction Jalido./()8 ./Jalido=true <<si no tiene 5 caracteres no es vClido i3 (document.31.codi(o.value.len(t6 U= 5) ./Jalido=3alse else8 3or (i=04i554i++)8 .)ctual = document.31.codi(o.value.c6ar)t(i) i3 (validarBntero(.)ctual)=="")8 ./Jalido=3alse %reaV4 9 9 9 return ./Jalido 9
3implemente se encarga de comprobar que el campo de texto contiene E caracteres y hacer un recorrido por cada uno de los caracteres para comprobar que todos son enteros. *l principio se supone que el cdigo postal es correcto colocando la variable 'P1alido a true y si alguna comprobacin falla se cambia el estado correcto a incorrecto pasando dicha variable a false. 3e puede probar a montar el e#emplo con dos campos... nosotros ahora vamos a dar una solucin al problema bastante complicadilla ya que incluimos instrucciones para evitar el efecto del bucle infinito. 9o vamos a ver el e#emplo que dara el error lo de#amos para el que desee intentarlo por si mismo y recomendamos hacerlo porque as comprenderemos me#or el siguiente cdigo.
56tml= 56ead= 5title=Bvento on%lur5<title= 5script= avisado=3alse 3unction validarBntero(valor)8 <<intento convertir a entero. <<si era un entero no le a3ecta valor = parseInt(valor)
<<.omprue%o si es un valor numOrico i3 (is*a*(valor)) 8 <<entonces (no es numero) devuelvo el valor cadena vacia return "" 9else8 <<Bn caso contrario (1i era un nPmero) devuelvo el valor return valor 9 9 3unction comprue%aJalidoBntero()8 enteroJalidado = validarBntero(document.31.numero.value) i3 (enteroJalidado == "")8 <<si era la cadena vac@a es Rue no era vClido. Ko aviso i3 (Uavisado)8 alert (">e%e escri%ir un enteroU") <<selecciono el texto document.31.numero.select() <<coloco otra veN el 3oco
54
3unction comprue%aJalido./()8 ./Jalido=true <<si no tiene 5 caracteres no es vClido i3 (document.31.codi(o.value.len(t6 U= 5) ./Jalido=3alse else8 3or (i=04i554i++)8 .)ctual = document.31.codi(o.value.c6ar)t(i) i3 (validarBntero(.)ctual)=="")8 ./Jalido=3alse %reaV4 9 9 9 i3 (U./Jalido)8 i3 (Uavisado)8 <<si no es valido Ko aviso alert (">e%e escri%ir un cYdi(o postal vClido") <<selecciono el texto document.31.codi(o.select() <<coloco otra veN el 3oco <<document.31.codi(o.3ocus() avisado=true setTimeout(Wavisado=3alseW 50) 9 9 9 5<script= 5<6ead= 5%odE= 53orm name=31= Bscri%a un nPmero enteroD 5input tEpe=text name=numero siNe=" value="" on%lur="comprue%aJalidoBntero()"= 5%r= Bscri%a un cYdi(o postalD 5input tEpe=text name=codi(o siNe=" value="" on%lur="comprue%aJalido./()"= Fespera una cadena con 5 carCcteres numOricos 5<3orm= 5<%odE= 5<6tml=
Este e#emplo sigue la gua del primer e#emplo de onblur de este artculo incluyendo un nuevo campo a validar. Para solucionar el tema del bucle infinito que habr!is podido investigar por vosotros mismos y en el que se mostraban una ca#a de alerta tras otra indefinidamente hemos utili(ado una variable llamada avisado que contiene un true si ya se ha avisado de que el campo estaba mal y un false si no se ha avisado todava. 'uando se va a mostrar la ca#a de alerta se comprueba si se ha avisado o no al usuario. 3i ya se avis no se hace nada evitando que se muestren m$s ca#as de alerta. 3i no se haba avisado todava se muestra la ca#a de alerta y se coloca el foco en el campo que era incorrecto. Para restituir la variable avisado a false de modo que la prxima ve( que se escriba mal el valor se muestre el mensa#e correspondiente se utili(a el m!todo set&imeout que e#ecuta la instruccin con un retardo en este caso de E= milisegundos. "o suficiente para que no se meta en un bucle infinito.
Nota: +espu!s de todos los parches que hemos tenido que colocar para que este evento se comporte correctamente para cumplir el cometido deseado es posible que no mere(ca la pena utili(arlo para este cometido. Podemos hacer uso del evento onchange o comprobar todos los campos de una sola ve( cuando el usuario ha decidido enviarlo.
55
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Podemos ver en marcha este e#emplo en una p$gina aparte.
Artculo por
9os fi#amos en el select asociado al pas de este formulario que cuando se cambia la opcin de pas se debe llamar a la funcin cambiaNprovinciaAB. 1eremos m$s adelante esta funcin ahora es importante fi#arse que est$ asociada al evento onchange que se activa cuando cambia la opcin en el select. &odo lo dem$s ser$ cdigo Javascript. Empe(amos definiendo un montn de arrays con las provincias de cada pas. En este
56
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com caso tenemos slo @ pases entonces necesitar! @ arrays. En cada array tengo la lista de provincias de cada pas colocada en cada uno de los elementos del array. *dem$s de#ar! una primera casilla con un valor CFC que indica que no se ha seleccionado ninguna provincia.
var provincias;1=new )rraE("7" ")ndaluc@a" ")sturias" "Maleares" ".anarias" ".astilla E KeYn" ".astilla7Ka 0anc6a" "...") var provincias;!=new )rraE("7" "1alta" "1an Quan" "1an Kuis" "Ka Iio-a" "Ka /ampa" "...") var provincias;3=new )rraE("7" ".ali" "1antamarta" "0edellin" ".arta(ena" "...") var provincias;4=new )rraE("7" ")isne" ".reuse" ">ordo(ne" "Bssonne" "Lironde " "...")
8ay que fi#arse que los ndices del array de cada pas se corresponden con los del select del pas. Por e#emplo la opcin Espa:a tiene el valor asociado 7 y el array con las provincias de Espa:a se llama provinciasN7. El script se completa con una funcin que reali(a la carga de las provincias en el segundo select. El mecanismo reali(a b$sicamente estas acciones: +etecto el pas que se ha seleccionado 3i el valor del pas no es = Ael valor = es cuando no se ha seleccionado pasB &omo el array de provincias adecuado utili(ando el ndice del pas. /arco el n4mero de opciones que debe tener el select de provincias Para cada opcion del select coloco su valor y texto asociado que se hace corresponder con lo indicado en el array de provincias. 3I 96 AEl valor de pas es = no se ha seleccionado pasB 'oloco en el select de provincia un 4nico option con el valor CFC que significaba que no haba provincia. 'oloco la opcin primera del select de provincia como la seleccionada.
"a funcin tiene el siguiente cdigo. Est$ comentado para que se pueda entender me#or.
3unction cam%ia;provincia()8 <<tomo el valor del select del pais ele(ido var pais pais = document.31.paisSdocument.31.pais.selectedIndexT.value <<miro a ver si el pais estC de3inido i3 (pais U= 0) 8 <<si esta%a de3inido entonces coloco las opciones de la provincia correspondiente. <<selecciono el arraE de provincia adecuado mis;provincias=eval("provincias;" + pais) <<calculo el numero de provincias num;provincias = mis;provincias.len(t6 <<marco el nPmero de provincias en el select document.31.provincia.len(t6 = num;provincias <<para cada provincia del arraE la introduNco en el select 3or(i=04i5num;provincias4i++)8 document.31.provincia.optionsSiT.value=mis;provinciasSiT document.31.provincia.optionsSiT.text=mis;provinciasSiT 9 9else8 <<si no 6a%@a provincia seleccionada elimino las provincias del select document.31.provincia.len(t6 = 1 <<coloco un (uiYn en la Pnica opciYn Rue 6e de-ado document.31.provincia.optionsS0T.value = "7" document.31.provincia.optionsS0T.text = "7" 9 <<marco como seleccionada la opciYn primera de provincia document.31.provincia.optionsS0T.selected = true 9
57
El e#emplo es tan sencillo que casi sobran las explicaciones. 3implemente creamos una funcin que abre una ventana secundaria y la asociamos con el evento onunload que se coloca en la etiqueta IbodyJ. 3e puede ver en marcha en una p$gina aparte.
Referencia: 3i no tenemos una base de Javascript nos vendr$ muy bien acceder a nuestra seccin Javascript a fondo. 3i deseamos conocer m$s cosas de los eventos. 3i deseamos saber m$s sobre abrir ventanas.
Artculo por
58
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com El cdigo sera el siguiente:
56tml= 56ead= 5title=JotameUU5<title= 5script lan(ua(e="Qava1cript"= 3unction pedirJoto()8 i3 (con3irm("Bsta pC(ina estC (enial (Ea la puedes ver). [0e das tu voto\"))8 window.open("6ttpD<<www.loRuesea.com<votar.p6p\idvoto=1!111" "" "") 9 9 5<script= 5<6ead= 5%odE onload="pedirJoto()"= 561=/C(ina 1uper.6ula5<61= 5%r= Bsta pC(ina estC muE %onita. 1oE su autor E te puedo ase(urar Rue no 6aE muc6as pC(inas con tanta calidad en Internet 5%r= 5%r= 5a 6re3="^"=Bntrar5<a= 5<%odE= 5<6tml=
9os fi#amos que en la etiqueta IbodyJ tenemos el evento onloadMCpedir1otoABC. Es decir que cuando se cargue la p$gina se llamar$ a una funcin llamada pedir1otoAB que hemos definido en el bloque de script que tenemos en la cabecera. "a funcin pedir1otoAB utili(a una ca#a confirm para saber si realmente el usuario desea votarnos. "a funcin confirmAB muestra una ca#a con un texto y dos botones para aceptar o cancelar. El texto es lo que se recibe por par$metro. +ependiendo de lo que se pulse en los botones la funcin confirmAB devolver$ un true si se apret el botn aceptar o un false en caso de que se pulsase sobre cancelar. "a funcin confirmAB est$ a su ve( metida dentro de un bloque condicional if de modo que dependiendo de lo que se puls en la ca#a confirm el if se evaluar$ como positivo o negativo. En este caso slo se reali(an acciones si se puls sobre aceptar. Para acceder a la p$gina donde se contabili(a nuestro voto tenemos el m!todo )indo).openAB que sirve para abrir ventanas secundarias o popups. /ostramos la p$gina donde se vota en una ventana secundaria para que el visitante no se marche de nuestra )eb ya que acaba de entrar y no deseamos que se vaya ya. 'on esto queda m$s o menos ilustrado cmo hacer uso del evento onload. 3eguro que en vuestras creaciones habr$ muchos m$s casos donde utili(arlo.
Artculo por
En el artculo de mane#adores de eventos de Javascript vimos los eventos de las versiones de Javascript 7.= 7.7 y 7.< pero en este caso vamos a presentar el listado de los mane#adores de eventos de Javascript 7.?. 'ada evento tiene un nombre por e#emplo Cclic-C. "os mane#adores eventos que son usados para invocar una serie de
59
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com comandos cuando se produce un evento tienen siempre la palabra ConC seguida del nombre del evento. Por e#emplo Conclic-C.
60
Parte ):
El Hloque try se e#ecuta tal cual hasta que un posible error se ha detectado. 3i no se detecta un error durante la e#ecucin del bloque try el catch se de#a del lado y no se reali(a. En caso que s se detecte un error en el bloque try se e#ecuta las sentencias que tenamos en el catch.
3i nos fi#amos podemos ver que el bloque catch recibe un dato que en este caso hemos almacenado en la variable CmierrorC. Esa variable contiene informacin sobre el error detectado que puede ser 4til para reali(ar el tratamiento al error.
61
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 1eamos este cdigo:
trE 8 <<intento al(o Rue puede producir un error 3uncion;Rue;no;existe() 9catc6(mierror)8 alert("Brror detectadoD " + mierror.description) 9
'uando se e#ecute el try se detectar$ un error al tratar de e#ecutar una funcin que no existe. Entonces se e#ecutar$ la cl$usula catch mostrando el error que se ha detectado. 3i nos fi#amos se muestra una descripcin del error detectado mediante mierror.description. Pero la propiedad description del error slo existe en Internet Explorer. En %irefox para mostrar una descripcin del error lo hacemos directamente con la variable. *s:
trE 8 <<intento al(o Rue puede producir un error 3uncion;Rue;no;existe() 9catc6(mierror)8 alert("Brror detectadoD " + mierror) 9
Entonces para hacer un bloque try U catch como este que funcione en los dos navegadores deberamos hacer esto:
trE 8 <<intento al(o Rue puede producir un error 3uncion;Rue;no;existe() 9catc6(mierror)8 i3 (mierror.description)8 alert("Brror detectadoD " + mierror.description) 9else8 alert("Brror detectadoD " + mierror) 9 9
Este cdigo v$lido tanto para Internet Explorer como %irefox lan(a una excepcin en el bloque try. "uego en el bloque catch se muestra la excepcin que se ha detectado.
Artculo por
62
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com lengua#e tanto para dar los primeros pasos como reali(ar operaciones m$s complicadas. 9uestros manuales vienen con explicaciones detalladas sobre Javascript pero siempre es bueno tener a mano unas CchuletasC o m$s dicho de forma m$s elegante ho#as de referencia r$pida. En !stas se encuentran multitud de nombres de funciones m!todos y distintos usos del lengua#e que son repetidos a menudo durante la programacin. En Internet se pueden encontrar diversas ho#as de referencia muy 4tiles completas y bien presentadas que nos pueden ayudar en nuestro da a da con el lengua#e si las tenemos impresas en papel y a mano para consulta. "o bueno es que las ofrecen programadores de manera gratuita con lo que podemos verlas y si nos parece que pueden ayudarnos se pueden imprimir libremente. 6s paso algunos enlaces interesantes para encontrar estas chuletas de Javascript: Javascript .uic- 5eference 'ard 'huleta de referencia Javascript escrita en dos p$ginas con conceptos bastante b$sicos sobre estructuras de control operadores etc as como ob#etos y m!todos. Java3cript and Hro)ser 6b#ects .uic- 5eference ; p$ginas con un listado de todos los ob#etos del navegador y sus propiedades y m!todos. Est$ sacada del libro CJavascript HibleC. Javascript 'heat 3heet: En una sola p$gina se muestran algunas notas sobre sintaxis los m!todos b$sicos de Javascript eventos los m!todos +6/ e incluso algunas ayudas sobre *#ax. Java3cript in one page 9o se podra imprimir en una sola p$gina pero muestra una completa tabla sobre Javascript de la que se podra incluso aprender con las escuetas explicaciones. 5eferencia Javascript 6tra peda(o p$ginaFresumen de Javascript pero que ocupa varias p$ginas con referencia sobre sintaxis orientacin a ob#etos as como compatibilidad de distintos componentes de la tecnologa con cada navegador. Expresiones regulares en Javascript 'on explicaciones muy r$pidas y esquem$ticas sobre expresiones regulares. Jquery 'heat 3heet 2na p$gina con una referencia r$pida para los que traba#an con Jquery 7.<. 1er tambi!n esta otra chuleta a color de Jquery. Prototype Javascript "ibrary 7.E.= 2na superconcentrada ho#a de clases y m!todos de Prototype. * field guide to scriptaculous combination effects 5eferencia r$pida a efectos con 3criptaculous. /ootools 7 7 'heat 3heet 8o#a de referencia a las clases de /ootools. 'huleta +6/ &odos los m!todos del +6/ de Javascript con r$pidas explicaciones.
Artculo por
63
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 3i has seguido hasta este punto los manuales de Javascript generales es decir el /anual de Programacin en Javascript I y su segunda parte el /anual de Programacin en Javascript II estamos seguros que tendr$s ya un conocimiento slido sobre este lengua#e y las posibilidades b$sicas de la programacin en el cliente. 3in embargo t4 mismo te puedes preguntar cmo hacer muchas de las cosas que ves en tantas y tantas p$ginas )eb como interfaces de usuario avan(adas que responden a la interaccin con el visitante efectos especiales *#ax etc. 'omo podr$s comprobar a continuacin todo esto se puede aprender sin salir de +esarrollo,eb.com y afortunadamente ahora est$ a tu alcance con poco esfuer(o adicional.
64
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com *ctualmente existen opciones mucho me#ores. 3in lugar a dudas #.uery es el frame)or- Javascript m$s popular en estos momentos. * poco que se aprenda de #.uery se podr$ comprobar que es una aut!ntica delicia para implementar tanto interactividad como efectos especiales sobre p$ginas )eb. Para aprender este frame)or- tenemos un completo /anual de #.uery que no exageramos si decimos que es uno de los me#ores manuales ya publicados en +esarrollo,eb.com. *dem$s hemos publicado tambi!n un &aller de #.uery para aprender por la pr$ctica. 6tro de los frame)or-s populares es /ootools casi tan bueno como #.uery pero con sus particularidades. En mi opinin resulta un poco m$s complicado de mane#ar para ciertos usos pero es una gran librera. Para aprender puedes consultar el /anual de /ootools tratado tambi!n con gran detalle y el &aller de /ootools. &ambi!n tenemos un tercer frame)or- en discordia que nos lo ofrece el equipo de Gahoo0. En esta ocasin el manual slo tiene una ligera presentacin y explicaciones para empe(ar a traba#ar en el /anual de Introduccin a G2I.
65