Manual de Javascript
Manual de Javascript
Manual de Javascript
Captulo 1. Introduccin ................................................................................................1 1.1 Creacin de sitios Web........................................................................................1 1.1.1 Introduccin a la creacin de sitios Web ...................................................1 1.1.2 Estudio previo: para qu? para quin? cmo? .........................................1 1.1.3 Tipos de estructura Web............................................................................2 1.1.4 Formas bsicas de un sitio Web .................................................................3 1.2 Pginas interactivas .............................................................................................3 1.3 Tecnologas aplicadas a pginas interactivas ........................................................4 1.3.1 Java Applets............................................................................................4 1.3.2 JavaScript ..................................................................................................5 1.3.3 Plug-ins .....................................................................................................6 1.3.4 Flash .........................................................................................................7 1.4 Html y JavaScript .................................................................................................8 1.4.1 La etiqueta Script.......................................................................................8 1.4.2 Javascript dentro de HTML ......................................................................11 Referencias..............................................................................................................16 Captulo 2. Caractersticas del lenguaje JavaScript ........................................................17 2.1 Variables ..........................................................................................................17 2.1.1 Definicin de variables en JavaScript .......................................................17 2.1.2 Reglas de la definicin de variables .........................................................18 2.1.3 Alcance de una variable ..........................................................................18 2.2 Literales............................................................................................................19 2.3 Tipos de datos ..................................................................................................19 2.4 Operadores ......................................................................................................20 2.4.1 Operadores aritmticos ...........................................................................20 2.4.2 Operadores de comparacin ...................................................................21 2.4.3 Operadores lgicos.........................................................................................22 2.4.4 Operadores de cadena....................................................................................23 2.4.5 Operadores de asignacin ..............................................................................23 2.4.6 Operadores especiales....................................................................................24 2.5 Expresiones del lenguaje...................................................................................24 2.6 Arreglos............................................................................................................25 2.7 Funciones.........................................................................................................26 2.8 Objetos ...........................................................................................................28 Referencias..............................................................................................................30
Captulo 3. Estructuras de control .................................................................................31 3.1 Bifurcaciones.....................................................................................................31 3.1.1 Sentencia If_else.....................................................................................31 3.1.2 Sentencia Switch .....................................................................................33 3.2 Ciclos................................................................................................................34 3.2.1 Sentencia For ..........................................................................................35 3.2.2 Sentencia While ......................................................................................36 3.2.3 Sentencia Do...while ...............................................................................37 3.2.4 Sentencia Label .......................................................................................38 3.2.5 Sentencia Break.......................................................................................38 3.2.6 Sentencia Continue .................................................................................39 Referencias..............................................................................................................39 Captulo 4. Objetos especiales en JavaScript.................................................................40 4.1 El objeto Array...................................................................................................40 4.2 El objeto Date....................................................................................................42 4.3 El objeto Frame .................................................................................................43 4.4 El objeto Window..............................................................................................46 4.5 El objeto Math ...................................................................................................49 4.6 El objeto Navigator............................................................................................50 Referencias..............................................................................................................51 Captulo 5. Manejo de eventos.....................................................................................52 5.1 JavaScript y DHTML ..........................................................................................52 5.2 Eventos para botones .........................................................................................54 5.3 Eventos para ligas ..............................................................................................59 5.4 Eventos para ventanas........................................................................................60 Referencias..............................................................................................................62 6. Programacin avanzada ...........................................................................................63 6.1 Creacin de bibliotecas de funciones .................................................................63 6.2 Programacin para formularios ..........................................................................67 6.3 Programacin de animaciones ...........................................................................68 6.4 Programacin bsica de cookies ........................................................................73 6.5 Manejo de capas en un documento ...................................................................77 Referencias..............................................................................................................83
CAPTULO 1. INTRODUCCIN
1.1 Creacin de sitios Web
1.1.1 Introduccin a la creacin de sitios Web En un principio la construccin de un sitio Web era una tarea ms o menos simple. Constaba de unas cuantas pginas enlazadas entre s de forma sencilla, y cada una de ellas estaba formada por un cdigo HTML bsico, unas pocas imgenes y algo ms. Pero con el paso del tiempo las exigencias del mercado hicieron aparecer ms y ms lenguajes de programacin basados en los navegadores, a la par que se introdujeron en el mundo Web las tiendas virtuales y la banca electrnica, demandando sitios Web capaces de poder operar con datos, con transacciones y con una interminable serie de nuevas aplicaciones concebidas para estos propsitos. Esto ha hecho que aquellos inicialmente simples sitios Web se hayan convertido en verdaderos monstruos de cdigo, formados por multitud de pginas repletas de tablas, formularios y cdigos de lenguajes de programacin de todo tipo. Se ha pasado de lo simple a lo complejo, proceso que contina a la fecha. Y al cambiar el concepto de los sitios Web tambin ha cambiado paralelamente la forma de planificarlos y de estructurarlos, siendo necesario ahora un complejo estudio de los mismos, con objeto de crear un ente complejo y funcional, bien estructurado, capaz de facilitar a los usuarios finales una navegacin clara y una operatividad perfectamente definida. Con ello se ha pasado del diseador Web solitario, que construa sus pginas artesanalmente, a un completo y complejo equipo de desarrollo, formado por numerosos tcnicos que siguen un plan perfectamente estudiado de diseo y programacin. 1.1.2 Estudio previo: para qu? para quin? cmo? Para desarrollar un buen sitio Web se tienen que hacer algunas preguntas. La primera es para qu se desea crear el sitio? Puede parecer una pregunta trivial, pero es de gran importancia, ya que si se delimita claramente el objetivo de las pginas se habr avanzado mucho en el establecimiento del esquema general que se deber usar en el sitio Web. La siguiente pregunta que se debe hacer es para quin se va a crear el conjunto de pginas Web, y esta pregunta a la vez se debe desglosar en dos: quin va a ser el cliente (la persona o empresa para la que se va a crear el sitio) y quines van a ser los potenciales visitantes. La ltima pregunta implica el cmo se van a plasmar todos los requerimientos, y su respuesta es ya el complejo proceso de la creacin del sitio. Los pasos necesarios para ello van a variar mucho dependiendo de las premisas obtenidas antes.
1.1.3 Tipos de estructura Web Los principales tipos de estructura son: Estructura jerrquica: que parte de una pgina principal mediante la que se puede acceder a diferentes pginas secundarias, a partir de las cuales se puede acceder a su vez a las pginas terciarias, y as sucesivamente. La disposicin de un sitio de este tipo sigue el esquema general expresado en el siguiente grfico:
Estructura lineal: es la que partiendo de una pgina inicial se van recorriendo las dems del sitio Web secuencialmente, una detrs de otra. Es anloga en su disposicin a la estructura de las pginas de un libro. Cada pgina posee un enlace a su anterior en la secuencia y otro a su siguiente. La representacin grfica es la siguiente:
Estructura lineal-jerrquica o mixta: que como su propio nombre indica es una mezcla de las dos anteriores, en la que partiendo de una pgina principal o de inicio se accede a diferentes pginas de entrada a secciones, a partir de las cuales la navegacin es lineal. Su representacin grfica es la siguiente:
Estructura de frames: es la tpica de una interfaz a base de frames y en la que el usuario dispone de un men siempre presente desde el que puede acceder en todo momento a las pginas de entrada a las diferentes secciones del sitio Web, a partir de las que puede navegar bien de forma jerrquica, bien de forma lineal, bien de forma mixta. Su representacin grfica es del tipo:
Estructura Web: en la que se puede estructurar las diferentes pginas con libertad total. Es la que da ms facilidades a los diseadores, pero puede resultar a veces demasiado confusa para los usuarios, ya que le permite visitar un sitio sin un rumbo fijo, pudiendo desde cualquier pgina acceder a los contenidos de un conjunto indeterminado de otras. Su representacin grfica puede ser del tipo:
1.1.4 Formas bsicas de un sitio Web Existen bsicamente tres formas de hacer sitios Web: - La manera fcil. - La manera difcil. - La manera regular. La manera fcil consiste en utilizar programas como Netscape Composer, FrontPage y Microsoft Word, entre otros, que son llamados editores WYSIWYG (What You See Is What You Get), lo que ves es lo que obtienes). Se refiere a aquellos editores que te presentan inmediatamente en pantalla cmo luce el documento que se est creando. En estos casos, el diseo Web se convierte en una tarea casi igual a la escritura de una carta normal. No obstante, esta forma "fcil" a la larga es la ms difcil, porque las pginas creadas de esta manera son muy complicadas de mantener cuando hay que hacer cambios importantes o cuando hacen falta opciones avanzadas. La manera "difcil" consiste en que el creador utiliza nicamente un editor de texto (como Notepad o Bloc de Notas de Windows, vi o pico en UNIX ) y escribe desde cero todas las etiquetas HTML necesarias. Esto es muy laborioso pero ofrece el mximo de flexibilidad. Por ltimo, la manera "regular", se refiere al uso de programas que facilitan la escritura en el lenguaje HTML. Estos programas hacen buena parte del trabajo pesado pero el autor tiene la responsabilidad final de revisar qu est sucediendo. De este modo se combina la practicidad de la manera "fcil" con la flexibilidad de la "difcil".
documento HTML. Por tanto es un lenguaje que no crea aplicaciones independientes, y que slo funciona incorporado a documentos HTML. En cambio, el lenguaje Java es un verdadero lenguaje de programacin que puede utilizarse para generar programas independientes. Su gran ventaja reside en que es reconocido por todo tipo de ordenadores y por tanto las aplicaciones escritas en Java pueden ejecutarse sin necesidad de complementos especiales. En las pginas Web pueden incluirse programas de este tipo (applets) que pueden ejecutarse en el navegador. Ms adelante se dar mayor informacin de cmo crear pginas interactivas.
Otra diferencia importante es que Java es un lenguaje lo bastante potente como para desarrollar aplicaciones en cualquier mbito. No es un lenguaje para programar en Internet, sino que se trata de un lenguaje de propsito general, con el cual se puede escribir desde un applet para una pgina Web (esto es una pequea aplicacin escrita con un determinado formato que se incorpora dentro de un documento HTML) hasta una aplicacin que no tenga ninguna clase de conexin a Internet. Los requerimientos tambin son diferentes, ya que para programar en JavaScript slo es necesario un editor de texto mientras que para programar en Java se necesita un compilador especfico. La complejidad de Java es semejante a la de un programa en C++ mientras que la de JavaScript es cercana a la de uno en dBase, Clipper o sh. Por otra parte, la sintaxis de ambos lenguajes es muy similar sobre todo en lo que a estructuras de control de flujo se refiere. Existen adems mecanismos de comunicacin entre Java y JavaScript. En definitiva, la principal ventaja de JavaScript es su simplicidad y su menor demanda de recursos. A continuacin se establece un cuadro comparativo entre JavaScript y Java. JavaScript Interpretado navegador. (no compilado) en un Java Compilado en servidor antes de la ejecucin en el cliente. Programacin orientado a objetos. Los applets constan de clases objeto con herencia. Applets diferenciados del cdigo HTML (accesibles desde las pginas HTML). Necesario declarar los tipos. Enlazados estticos. Los objetos referenciados deben existir en tiempo de compilacin.
Basado en objetos. Usa objetos, pero no clases ni herencia. Cdigo integrado en el cdigo HTML. No es necesario declarar el tipo de las variables. Enlazado dinmico. Los objetos referenciados deben existir en tiempo de ejecucin (lenguaje interpretado). 1.3.2 JavaScript
JavaScript es un lenguaje interpretado, inspirado en Java, que se incluye en los documentos HTML para aadir cierta interaccin a sus contenidos, evitando tener que realizar programacin en el servidor. Fue desarrollado por Netscape y Sun Microsystems, y se puede usar en los clientes Web de Netscape (a partir de la versin 2.0) y Microsoft (a partir de la versin 3.0); hay ligeras diferencias en los intrpretes JavaScript de cada plataforma, por lo que en caso de duda, se deber consultar la informacin de referencia del fabricante
JavaScript es un lenguaje de programacin utilizado para crear pequeos programitas encargados de realizar acciones dentro del mbito de una pgina Web. Con JavaScript se puede crear efectos especiales en las pginas y definir interacciones con el usuario. El navegador del cliente es el encargado de interpretar las instrucciones JavaScript y ejecutarlas para realizar estos efectos e interacciones, de modo que el mayor recurso, y tal vez el nico, con que cuenta este lenguaje es el propio navegador. Entre las acciones tpicas que se pueden realizar en JavaScript se tienen dos vertientes. Por un lado los efectos especiales sobre pginas Web, para crear contenidos dinmicos y elementos de la pgina que tengan movimiento, cambien de color o cualquier otro dinamismo. Por el otro, JavaScript permite ejecutar instrucciones como respuesta a las acciones del usuario, con lo que se pueden crear pginas interactivas con programas como calculadoras, agendas, o tablas de clculo. Caractersticas de JavaScript Es un lenguaje de sintaxis similar a Java, en cuanto a tipos de datos y estructuras de control; sin embargo, al no ser compilado, realiza un control de tipos menos estricto. Por ejemplo, no es necesario declarar las variables, y su tipo puede cambiar durante la ejecucin del programa. Todas las referencias entre objetos se resuelven en tiempo de ejecucin; Java lo realiza en tiempo de compilacin. JavaScript tambin es interpretado, pero a diferencia de Java, el cdigo JavaScript no se compila, sino que se inserta directamente en los documentos HTML. Por ello, no es necesario disponer de ninguna herramienta de compilacin, slo un browser que lo interprete. Utiliza un gestor automtico de memoria dinmica, que reserva espacio para crear objetos y lo elimina cuando stos ya no se utilizan. Est basado en un conjunto predefinido de objetos, que pueden ser extendidos. Sin embargo, no es posible crear nuevas clases, o establecer relaciones de herencia. Permite utilizar funciones, al estilo de los lenguajes de programacin orientados a procedimientos. En Java, las funciones slo pueden existir como mtodos de acceso a un objeto. Las versiones de JavaScript Finalmente, a continuacin se mencionan las versiones de JavaScript que han surgido. La versin 1.0 de JavaScript naci con el Netscape Navigator 2.0. Posteriormente, surgieron las versiones 1.1 y 1.2 de JavaScript con las versiones 3 y 4 del Netscape. Tambin existe una versin 1.3, introducida en la versin 4.07 del Netscape Navigator. Esta versin es una pequea revisin de la 1.2 creada para ajustarse al estndar internacional ECMA que regula el lenguaje JavaScript. En cuanto a Microsoft Internet Explorer en su versin 3.0 interpreta JScript, que es muy similar a JavaScript 1.0 pero con algunas incompatibilidades. Pero ya su versin 4.0 soporta sin ningn problema, la versin 1.1 de JavaScript. 1.3.3 Plug-ins Los plug-ins son una serie de programas que se incorporan automticamente al funcionamiento de los navegadores y que aumentan las capacidades de los mismos,
6
permitiendo el manejo de los diferentes tipos de informacin grfica y de sonidos que se incluyen en las pginas Web sin necesidad de recurrir a otros programas externos. En este sentido existen programas que permiten ver documentos creados con MS-Word o WordPerfect directamente desde el navegador sin necesidad de iniciar los procesadores de textos o transmitir y reproducir rpidamente video y sonido con gran calidad, o acceder a pginas creadas en realidad virtual. En otras palabras, un plug-in es un pequeo programa que aade alguna funcin a otro programa, habitualmente de mayor tamao. Un programa puede tener uno o ms conectores. Por ejemplo, para poder utilizar las capacidades multimedia (informacin digitalizada que combina texto, grficos, imagen fija y en movimiento, as como sonido) de muchos sitios Web. Se usan plug-ins cuando se entra a una pgina que requiere de los mismos para poder aprovechar todas las posibilidades multimedia que estn contenidas en esa pgina. Se activan en forma automtica. Si se entra a una pgina y no se tiene el plug-in necesario para visualizarla el browser avisa sobre la situacin y generalmente da la posibilidad de descargarlo de Internet. Muchas empresas estn desarrollando plug-ins para los distintos browsers y los programadores de pginas Web estn utilizando las posibilidades que esto les brinda. La mayora de los plug-ins son esencialmente visualizadores de distintos formatos de grficos, video y audio. Tambin hay plug-ins que permiten utilizar 3D, adquirir capacidades comerciales y controlar en forma remota otras computadoras, entre otras opciones. El inconveniente principal de los plug-ins es que hay que buscarlos e instalarlos. Por esto, muchos desarrolladores de pginas Web estn optando por utilizar HTML dinmico. Este es la ltima versin de las especificaciones HTML que expanden las posibilidades de los navegadores con eventos, animaciones, etc. 1.3.4 Flash Flash debe sus races a una pequea compaa llamada FutureSplash que fue adquirida por Macromedia en 1997 para complementar su programa Director, que sirve para la creacin de producciones multimedia interactivas, ttulos de CD/DVD, etc., cuando deseaban darle un enfoque para el Web. Esta aplicacin es una mezcla de un editor de grficas y de un editor de pelculas. Para los que han utilizado otras aplicaciones grficas, algunas herramientas parecern familiares. Flash disea grficas de vectores; grficas definidas como puntos y lneas en lugar de pixeles. Es decir que los vectores son como un conjunto de instrucciones matemticas que por medio de valores le dan forma a una imagen. As, un crculo vectorial, puede ser ampliado al tamao que se desee y siempre seguir siendo un crculo perfecto, cosa que no se lograra en una grfica de pixeles donde se rellena cada punto de la imagen con un color para darle forma. Adems de las grficas vectoriales, Flash permite incluir audio comprimido en diversos formatos como el MP3, importar grficas creadas con otros programas, formularios y algo de programacin. Todo esto definido, al igual que los vectores, por un conjunto de instrucciones que mueven los objetos de posicin y forma, y que dan como resultado archivos muy pequeos que se cargan en poco tiempo. Es un programa en el que se disean animaciones audiovisuales, pero que se comprimen en forma de texto para que el reproductor la decodifique y las presente tal como fueron
7
creadas. Flash es independiente del navegador y el plug-in es universal, por lo que las animaciones diseadas con este programa se vern casi idnticamente en cualquier plataforma y navegador: la gran desventaja del DHTML (lenguaje HTML dinmico). La nica desventaja que tienen las pelculas Flash, es que para poder visualizarlas, es necesario tener instalado el plug-in. Aunque, por el impacto que ha tenido esta tecnologa, a partir de la versin 4.0 de los navegadores, el plug-in ya se incluye dentro de la instalacin. Para viejas versiones o sistemas operativos (o para actualizar a la nueva versin de Flash 4), el plug-in se puede descargar en unos cuantos minutos. As que en resumen, Flash es una tecnologa con mucho futuro por su funcionamiento y facilidad de uso. El programa tiene una gran facilidad de uso y cualquiera puede crear sus primeras animaciones luego de algunas horas de trabajarlas. Aunque claro, para convertirse en un verdadero experto en Flash es necesario mucho tiempo libre, imaginacin y paciencia.
Este primer programa se limita a escribir en pantalla un determinado texto para lo que se emplea el cdigo document.write. En este cdigo, document es un objeto creado por el sistema que hace referencia al propio documento y write es uno de los mtodos que proporciona para interaccionar con l. El resultado de cargar este documento en un browser que interprete JavaScript ser la aparicin de los dos textos, el escrito en JavaScript y el escrito en HTML, sin que el usuario sea consciente del proceso. El resultado sera: Mi primer JavaScript! Este es un document HTML normal En HTML otra vez Este script no es muy til pero sirve para mostrar el uso de la etiqueta <SCRIPT>. Puedes usar estas etiquetas en cualquier lugar del documento, tanto en la cabecera como en el cuerpo, aunque si se declaran funciones es ms aconsejable hacerlo en la cabecera. La etiqueta <SCRIPT>es una extensin de HTML en la que se encierra el texto que compone el cdigo del programa JavaScript correspondiente, de la manera siguiente: <Script> sentencias JavaScript... </Script> De esta manera el navegador que "entienda" JavaScript reconocer el texto encerrado entre estas etiquetas como cdigo JavaScript y no lo mostrar en la pantalla del cliente. Una cuestin importante a considerar es el mantenimiento de la compatibilidad con navegadores anteriores. Cualquier browser ignora las etiquetas desconocidas, por lo tanto, aquellos que no soporten JavaScript ignorarn el comienzo y el final del cdigo del programa (encerrado entre las etiquetas <SCRIPT> y </SCRIPT>).Para que el resto del cdigo tambin sea ignorado y no aparezca en la pantalla del cliente, lo encerraremos entre los smbolos de comentario HTML, <!-- y -->. Los navegadores que, por el contrario si lo soporten, interpretarn el cdigo encerrado entre las etiquetas SCRIPT e ignorar el principio de la lnea en el script que comienza con la doble slash (//) o bien el encerrado entre "/*" y "*/", que son los smbolos de comentarios en este lenguaje. Un documento puede tener varias etiquetas SCRIPT, y cada una de ellas incluir sentencias JavaScript diferentes. Si se quiere dar la posibilidad de ejecutar un cdigo alternativo a los browsers que no interpretan JavaScript, se deben utilizar las etiquetas: <NOSCRIPT></NOSCRIPT> Por ejemplo: <Html> <Head> <Script> <!-- Ocultacin a browsers antiguos
document.write("Si ves esto, tu browser interpreta JavaScript") // Fin de la ocultacin --> </Script> </Head> <Body> <Noscript> Si ves esto, tu browser no incorpora la etiqueta </Noscript> </Body> </Html> Con vistas a un uso futuro, esta etiqueta admite un parmetro opcional LANGUAGE que indica el lenguaje de script que se ha incrustado en el documento as como la versin de JavaScript. <Script Language="Versin de JavaScript "> sentencies JavaScript... </Script> Versin de JavaScript especifica la versin de JavaScript en la que est escrito el cdigo, y puede ser: <Script Language="JavaScript"> especifica JavaScript para Navigator 2.0. <Script Language="JavaScript1.1"> especifica JavaScript para Navigator 3.0. Las sentencias encerradas entre las etiquetas son ignoradas si el browser que las lee no tiene el nivel de JavaScript especificado en el atributo Language; por ejemplo: Navigator 2.0 ejecuta el cdigo escrito con la etiqueta <Script Language="JavaScript">e ignora el cdigo escrito en la etiqueta <Script Language ="JavaScript1.1">. Navigator 3.0 ejecuta el cdigo escrito entre las etiquetas <Script Language="JavaScript"> o <Script Language="JavaScript1.1">. Si el atributo Language es omitido, Navigator 2.0 asume Language="JavaScript" y Navigator 3.0 asume Language="JavaScript1.1" Puede usar el atributo Language para escribir scripts que contengan cdigo para Navigator 3.0 (con nuevas funciones que no existan en versiones anteriores) y que no provoquen un error ejecutndose bajo Navigator 2.0. Ejemplo: Este ejemplo muestra cmo usar dos versiones diferentes de JavaScript una para JavaScript 1.0 y otra para JavaScript 1.1. El documento cargado por defecto es para JavaScript 1.0. Si el usuario utiliza Navigator 3.0, utilizar la funcin location.replace("..") implementada nicamente en esta versin de JavaScript.
10
<Script Language="JavaScript1.1"> location.replace("mipagina.html") //sustituye la pgina actual por mipagina.html" </Script> En el Netscape 3.0 se aade un nuevo parmetro opcional a la etiqueta <SCRIPT>, SRC. El objeto del mismo es el de actuar como un include, incluyendo en el documento un cdigo JavaScript que pueda ser compartido por diversos documentos, es decir, posibilitar el uso de libreras. Se recomienda que stas tengan extensin ".js". La sintaxis asociada ser: El atributo SRC debe especificar una URL, relativa o absoluta. Por ejemplo: <script src="libreria.js"></script> <script src="http://home.netscape.com/functions/libreria.js"> Esta librera no puede contener cdigo HTML, nicamente instrucciones de JavaScript. 1.4.2 JavaScript dentro de HTML Los comandos JavaScript se pueden insertar en un documento HTML de tres formas diferentes, dentro del propio documento HTML (las lneas se interpretan a medida que se presenta el documento HTML), como un archivo externo (el resultado es equivalente al anterior) o como respuesta a operaciones realizadas por el usuario o cambios en contenido del documento HTML. a) Dentro del cdigo HTML Se ha definido la nueva etiqueta <Script></Script>, que permite insertar cdigo de cualquier lenguaje de script (JavaScript o VisualBasic Script). El siguiente esquema se puede copiar siempre que se quiera introducir cdigo JavaScript en un documento: <Script Language="JavaScript"> <!-- ocultar el cdigo para clientes www que no lo entiendan cdigo javascript // aqu terminan los comentarios --> </Script> Un bloque de cdigo se puede insertar en cualquier punto del documento. Sin embargo, es importante que las funciones JavaScript se siten al principio del mismo (idealmente dentro del <Head></Head>), para garantizar que estn disponibles antes de que se presente ningn elemento de la pgina. El cdigo insertado de esta forma se procesa a medida que es recibido: las funciones se almacenarn para su posterior uso y las sentencias insertadas se ejecutarn segn la lgica de sus estructuras de control. El siguiente ejemplo muestra la fecha de actualizacin del documento HTML: <Font size="-1"><tt>ultima actualizacin: <Script Language="JavaScript"> <!-document.write(document.lastmodified); --> </script> </tt></Font>
11
b) Como un archivo externo El cdigo de los programas puede residir en un archivo externo, que se carga con: <Script Language="JavaScript" src="url_del_archivo_con_cdigo"> </Script> c) Como eventos Es posible asignar la ejecucin de operaciones JavaScript ante la activacin de diversos eventos, que el usuario es capaz de generar en su uso del cliente Web. Los eventos se insertan como atributos de las etiquetas que los pueden generar: <ETIQUETA manejador="Cdigo JavaScript"> La siguiente tabla muestra las clases de eventos disponibles, junto a los objetos a los que se pueden asociar: Evento Abort Blur Se aplica a Las imgenes Ventanas, marcos y elementos de un formulario Botones, checkboxes, botones radio, enlaces Campos de texto, texarea y campos de seleccin Imgenes o ventanas Ventanas, marcos y elementos de un formulario Cuerpo del documento BODY Ocurre cuando Se interrumpe la carga de una imagen. Se sale del contexto de uno de estos elementos (con el ratn o cursor). Manejador OnAbort OnBlur
Click
OnClick
Change
OnChange
Error Focus
Se produce un error durante la carga de un documento. Se entra en el contexto de uno de estos elementos (con el ratn o cursor).
OnError OnFocus
Load
Se carga una pgina en el cliente. Se ejecutar como inicializacin de la presentacin del documento.
OnLoad
Mouseout Enlaces o reas Se mueve el ratn fuera de un enlace o mapa OnMouseo de un mapa activo. ut
12
Mouseover Enlaces o reas Se mueve el ratn dentro de un enlace o mapa OnMouseO activo. ver de un mapa Reset Select Submit Unload Formularios Se vuelve a presentar un formulario en blanco a travs de su botn RESET. OnReset OnSelect OnSubmit
Campos de texto Se selecciona todo o parte del contenido de esos o texarea elementos. Botones de envo Cuerpo del documento BODY Se enva un formulario. Al activar el botn Submit.
Se sale del documento. Se ejecutar siempre que se cambie de ste a otro documento, al activar un OnUnload nuevo enlace.
Como el cdigo JavaScript asociado a un evento se debe rodear de comillas dobles, dentro del mismo se podrn emplear comillas simples para introducir cadenas literales. Por ejemplo, el siguiente cdigo, se aprovecha de JavaScript para evaluar expresiones del lenguaje en tiempo de ejecucin (utilizando la funcin eval): <Html> <Head> <Script> <!-- Ocultar function calcular(f) { if (confirm("Ests seguro?")) f.result.value = eval(f.expr.value) else alert("Intntalo de nuevo") } // fin --> </Script> </Head> Introduce una expresin JavaScript: <Form> <Input Type="text" Name="expr" SIZE=15> <Input Type="button" Value="Calcular" onClick="calcular(this.form)"> <BR> Resultado: <Input Type="text" Name="result" SIZE=15> </Form> </Body> </Html> Este otro ejemplo muestra una explicacin en la lnea de estado de la ventana del cliente cuando se pasa el ratn sobre un enlace o imagen. El manejador de eventos debe devolver un valor true para que la lnea de estado cambie. Adems, existe una variable llamada defaultStatus, que contiene el valor por defecto de la lnea de estado.
13
defaultstatus = "Bienvenidos a la Universidad de Cantabria"; <-- cambiar al pasar por una imagen. --> <img src="foto.gif" onmouseover="window.status='Esta fotografa es de Santander'; return true"> <-- cambia entre dos valores al pasar por sobre el enlace --> <a href=http://www.unican.es/ onmouseover="window.status='Acceso a la Universidad de Cantabria' return true" onmouseout ="window.status=defaultstatus; return true"> Otros ejemplos 1) Este script abre una ventana, despus que la pgina fue cerrada: <Html> <!-- DOS PASOS PARA INSTALAR EL SCRIPT: 1. Copiar este cdigo dentro del HEAD de tu documento HTML 2. Sumar en el eventoe onLoad dentro del tag BODY --> <Head> <Script Language="JavaScript"> <!-- Comienzo closetime = 0; // Cerrar la ventana despus de __ segundos? function Start(URL, Width, Height) { windowprops = "left=50,top=50, width=" + Width + ",height=" + Height; preview = window.open(URL, "preview", windowprops); if (closetime) setTimeout("preview.close();", closetime*1000); } function doPopup() { url = "http://miVentana.htm"; width = 267; // ancho de la ventana en pixeles height = 103; // alto de la ventana en pixeles delay = 2; // time in seconds before popup opens timer = setTimeout("Start(url, width, height)", delay*1000); } // Fin --> </Script> <Body OnLoad="doPopup();"> <p><Center> <A Href="http://www.lavariable.com">El Sitio de los programadores </A></font> </Center><p> </Body> 2) En este ejemplo, vamos a validar los datos de tres formularios: <Html> <Head> <Script Language="JavaScript"> // Espacios en Blanco var espacio ="\t\n\r";
14
//Chequear cuando la entrada est vaca function EstaVacio(s) { return ((s == null) || (s.lenght == 0 )) } function HayEspacio(s) { var i; if (EstaVacio(s)) return true; // buscar a traves de lo caracteres hasta encontrar un no espacio en blanco. for (i = 0; i < s.length; i++) { var c = s.charAt(i); if (espacio.indexOf(c) == -1) return false; } return true; } function Entrar(val, str) { var strInput = new String(val.value); if (HayEspacio(strInput)) { alert(str); return false; } else return true; } function Ranking() { if (parseInt(document.forms[0].nRanking.value) >= 1 && parseInt(document.forms[0].nRanking.value) <= 10 ) return true; else return false; } function ValidarDatos() { var EnviarDatos = false; // Chequear si el campo nombre no est vaco EnviarDatos = EnviarDatos & Entrar(document.forms[0].txtNombre, "Ingres tu nombre completo."); //Chequear que el ranking sea entre 1 y 10 EnviarDatos = EnviarDatos & Ranking(); return EnviarDatos; } </Script> </Head> <Body> <Form name="Formulario" > Nombre Completo <Input Type="TEXT" Name="txtNombre" ><BR> Direccin de Email <Input Type="TEXT" Name="txtMail" ><BR> Una Puntuacin sobre el Sitio <Input Type="TEXT" Name="nRanking" ><BR>
15
<Input Type="button" Value="Enviar" onClick="ValidarDatos()"> </Form> </Body> </Html> Finalmente slo nos falta asociar el formulario con la accin de enviar los datos, por lo que la etiqueta <form> podra quedar como de la siguiente manera: <form name="Formulario" method="get" action="EntradaDeFormulario.asp" onsubmit="return ValidarDatos();">
Referencias
http://www.geocities.com/~venaventura/curso_web/introduccion.html http://www.terra.es/personal6/morenocerro2/diseno/estructura/creacion_1.html http://www.cap-semfyc.com/Salinfor/Internet/WWW/WWW.htm#introduccin http://java.programacion.net/applets/introduccion.htm http://www.geocities.com/CollegePark/Quad/8901/intro.htm http://www.redestb.es/javaaula/leccion1/javaintr.htm#JScript_HTML http://www.desarrolloweb.com/articulos/490.php?manual=20 http://ntic.org/espagnol/ABC/plug-in.html http://www.maestrosdelweb.com/editorial/tecnologias/flash.asp http://cdec.unican.es/libro/JavaScript.htm http://www.redestb.es/javaaula/leccion1/javaintr.htm#JScript_HTML http://www.lavariable.com/tutoriales/javascript/jsid1/jsid1.asp
16
document.write("<H1>Hola " + nombre + ". Bienvenido a mi pgina!</H1>") //--> </Script> </Body> </Html> 2.1.2 Reglas de la definicin de variables El nombre de una variable puede empezar por una letra o por el caracter _. Los caracteres posteriores pueden ser nmeros u otros alfanumricos. Los nombres de variables en JavaScript son sensibles a maysculas y minsculas, es decir, una variable cuyo nombre es resultado es distinta de Resultado e incluso de reSULTado. var Mi Variable, 123Probando, $Variable, for, while En resumen en la declaracin de variables, es importante verificar los siguientes puntos: El nombre de una variable no debe contener espacios en blanco. No puede comenzar con nmeros. No deber tener caracteres especiales. La declaracin es sensible a maysculas y minsculas.
Las siguientes declaraciones muestran ejemplos de la declaracin correcta de variables en JavaScript: var _Una_Variable, P123robando, _123, mi_carro; var Una_Variable="Esta Cadenita de texto"; 2.1.3 Alcance de una variable Dependiendo de su declaracin las variables en JavaScript pueden ser globales o locales. Una variable global es accesible desde cualquier parte del cdigo de JavaScript en la pgina, por su parte una variable local slo es accesible en un segmento de cdigo, por ejemplo una funcin. Cuando se codifica una funcin se pueden definir variables locales, las que slo tienen uso dentro de dicha funcin. El siguiente cdigo muestra un ejemplo de una variable global y otra local. var variableGlobal=0; function nuevaFuncion() { var variableLocal=1; variableGlobal =0; ... } La variable global es variableGlobal y la local es variableLocal.
18
2.2 Literales
Las literales son la forma en que se representan valores en JavaScript. Son valores fijos que se escriben directamente en el cdigo JavaScript. Existen varios tipos de literales: numricas, cadenas y booleanas. Estos son algunos ejemplos para representar literales: 42 3.14159 "Ser o no Ser." 34.0 23.232 +32.4 -232.0 432.3e32 43.433e+2 -34.34e-2 Literales Booleanos Los literales booleanos se representan como true o false. Literales de cadenas Los literales de cadenas se representan encerrando la cadena entre comillas simples o dobles. Ejemplos: "Hola" 'Cmo ests?'
19
TIPOS DE DATOS
Numricos Los enteros pueden ser expresados en base decimal, hexadecimal u octal. Ejemplos de tipo de datos numricos: 45, 34322, -4343 (decimal) 04343, 03234, -0543 (octal) 0x32fd4 0xdd (hexadecimal) Boleanos Cadenas Objetos Nulos Verdadero o Falso. Los tipos de datos cadena deben ir delimitados por comillas simples Ejemplo: "Un_dia"; objeto = new objeto(); null
Indefinidos Un valor indefindo es el que corresponde a una variable que ha sido creada pero no le ha sido asignado un valor.
2.4 Operadores
Los operadores pueden usarse para calcular o comparar valores, toman una o ms variables o valores y devuelven un nuevo valor; por ejemplo el ' +' operador puede agregar dos nmeros para producir un tercero. Lo operadores estn clasificados en varias clases dependiendo de la relacin que determinan, stos son: operadores aritmticos, de comparacin, lgicos, de cadena, de asignacin y especiales. 2.4.1 Operadores aritmticos Los operadores aritmticos toman los valores numricos (literales o variables) y devuelven un solo valor numrico. Operador + * / % ++ -Nombre Suma Substraccin Multiplicacin Divisin Mdulo: el resto despus de la divisin Incremento Decremento Invierte el signo de un operando Ejemplo 5+6 7-9 6*3 4/8 7%2 a++ a--a Descripcin Suma dos nmeros. Resta dos nmeros. Multiplica dos nmeros. Divide dos nmeros. Devuelve el resto de dividir ambos nmeros, en este ejemplo el resultado es 1. Suma 1 al contenido de una variable. Resta 1 al contenido de una variable. Invierte el signo de un operando.
20
Aqu se muestra un ejemplo del uso de los operadores aritmticos: <Html> <head> <title>Ejemplo de operadores aritmticos</title> </head> <body> <script language="JavaScript"> a = 8; b = 3; document.write(a + b); document.write("<br>"); document.write(a - b); document.write("<br>"); document.write( a * b); document.write("<br>"); document.write(a / b); document.write("<br>"); a++; document.write(a); document.write("<br>"); b--; document.write(b); </script> </body> </Html> 2.4.2 Operadores de comparacin Un operador de comparacin, como su nombre lo indica, compara sus operandos y devuelve un valor lgico(verdadero o falso) dependiendo de la comparacin de que se trate. Los operandos pueden ser numricos o cadenas. Operador == === != !== > >= < <= Descripcin " Igual a" devuelve true si los operandos son iguales. Estrictamente "igual a" (JavaScript 1.3). " No igual a" devuelve true si los operandos no son iguales. Estrictamente " No igual a" (JavaScript 1.3). " Mayor que" devuelve true si el operador de la izquierda es mayor que el de la derecha. " Mayor o igual que " devuelve true si el operador de la izquierda es mayor o igual que el de la derecha. " Menor que" devuelve true si el operador de la izquierda es menor que el de la derecha. "Menor o igual que" devuelve true si el operador de la izquierda es menor o igual que el de la derecha.
21
Ejemplo: <Html> <Head> <Title>Ejemplo de Operadores de comparacin</Title> </Head> <Body> <Script Language="JavaScript"> a = 8; b = 3; c = 3; document.write(a == b);document.write("<br>"); document.write(a != b);document.write("<br>"); document.write(a < b);document.write("<br>"); document.write(a > b);document.write("<br>"); document.write(a >= c);document.write("<br>"); document.write(b <= c);document.write("<br><br>"); document.write(3 == "3");document.write("<br>"); document.write(3 === "3");document.write("<br>"); </Script> </Body> </Html> 2.4.3 Operadores lgicos Los operadores lgicos se utilizan para combinar mltiples comparaciones en una expresin condicional. Un operador lgico puede tomar dos operandos cada uno de los cuales es un valor verdadero o falso y devuelve un valor ya sea verdadero o falso. Un caso especial es !, el cual slo trabaja sobre un operando. Operador && || ! Descripcin " Y " devuelve verdadero si ambos operandos son verdaderos. " O " devuelve verdadero si uno de los operandos es verdadero. "No" devuelve verdadero si la negacin del operando es verdadero.
Este es un ejemplo del uso de los operadores lgicos: <Html> <Head> <Title>Ejemplo de Operadores lgicos</Title> </Head> <Body> <Script Language="JavaScript"> a = 8; b = 3; c = 3;
22
document.write( (a == b) && (c > b) );document.write("<br>"); document.write( (a == b) || (b == c) );document.write("<br>"); document.write( !(b <= c) );document.write("<br>"); </Script> </Body> </Html> 2.4.4 Operadores de cadena Los valores de cadena pueden compararse usando los operadores de comparacin. Adicionalmente, usted puede concatenar cadenas usando el operador + . Este es un ejemplo del uso de los operadores de cadena. <Html> <Head> <Title>Ejemplo de operadores de cadena</Title> </Head> <Body> <Script Language="JavaScript"> Nombre = "Jose" document.write( "Hola " + Nombre +"." ); </Script> </Body> </Html> 2.4.5 Operadores de asignacin El operador de asignacin '=' le permite asignar un valor a una variable. Operador = Descripcin Asigna el valor del operando de la derecha a la variable de la izquierda. Ejemplo: total=100;
+= Aade el valor del operando de la derecha a la variable de la (tambin - =, * =, / =) izquierda. Ejemplo: total +=100, es lo mismo que total=total+100 &= (tambin |=) Asigna el resultado de (operando de la izquierda & operando de la derecha) al operando de la izquierda.
Este es un ejemplo del uso de los operadores de asignacin: <Html> <Head> <Title>Ejemplo de Operadores de asignacin</Title> </Head> <Body> <Script Language="JavaScript"> a = 8; b = 3; a += 3;
23
La primera asigna 7 a la variable X (y se evala a 7) y la segunda simplemente vale 7. JavaScript posee los siguientes tipos de expresiones: Aritmticas: tienen valores numricos. Cadenas: tienen valor de cadena. Lgicas: tienen valor booleano.
24
Expresiones condicionales JavaScript soporta expresiones condicionales de otros lenguajes de programacin como C++ y Java. La sintaxis de una expresin condicional es: (condicin) ? valor1 : valor2 Si la condicin es verdadera, la expresin tiene el valor valor1, y si no tiene el valor valor2. Se puede usar el operador ternario en cualquier parte de una expresin.
2.6 Arreglos
En JavaScript los arreglos son objetos. La sintaxis para crear un arreglo es la siguiente: var nombre = new Array( ); En donde nombre es el nombre de la variable arreglo. Como observar usted, a diferencia de otros lenguajes, no se requiere establecer la cantidad de localidades del arreglo. En Javascript el arreglo crecer en cuanto se requiera una determinada localidad. Ejemplo: Ejemplo: var n = new Array(); n[0]=1; n[1]=2; n[2]=3; n[3]=4; n[4]=5; n[0]+n[1]+n[2]+n[3]+n[4]; function suma(arr){ ? var acum=0; for (var i=0;i<arr.length;i++){ acum+=arr[i]; } return acum; } var m= new Array(); for (var i=0;i<5;i++) { ? m[i]=Math.round(Math.random()*100); } suma Suponiendo que quiere usted visitar una lista de nombres que quisiera recordar, o una lista de colores en los que le gustara se desplegara un texto. Todas estas listas pueden ser guardadas en arreglos.
? ?
Las funciones y sus especificaciones se presentan en la seccin 2.7. Las estructuras for y otras, se explican en el captulo 3.
25
As es como se creara un arreglo de colores: var colores = new Array("rojo","azul","verde"); Ahora aqu tiene un arreglo qu cosas puedes hacer con el? Lo mejor acerca de los arreglos es que los elementos de un arreglo pueden ser accedidos por nmeros. El primer elemento es nmero 0 y puede ser accesado de esta manera: var El_elemento = colores[0]; Si usted ejecuta una lnea de JavaScript, la variable El_elemento tendr el string "red." Usted accesar al primer elemento de un arreglo escribiendo el nombre del arreglo y poniendo el ndice del elemento entre parntesis. El segundo elemento de un arreglo corresponde al nmero 1 y as sucesivamente. Una vez que ya haya creado un arreglo, usted podr agregar y cambiar valores. Si usted decide cambiar el primer elemento del arreglo de los colores, debe sustituir por ejemplo el prpura por el rojo, para lo cual usted debe escribir: colores[0] = "prpura"; Si usted no le entendi muy bien a los arreglos no se preocupe, cuando veamos los objetos especiales de JavaScript le explicaremos ms detalladamente acerca de stos.
2.7 Funciones
Las funciones son uno de los pilares sobre los que se apoya JavaScript. Una funcin es un conjunto de sentencias o procedimientos que realizarn unas operaciones adecuadas, haciendo uso de determinadas variables y propiedades. Veamos las partes de la definicin de una funcin: 1. Nombre de la funcin. 2. Lista de parmetros de entrada (entre parntesis y separados por ','). 3. Conjunto de sentencias en JavaScript encerradas entre llaves: { } . stas podrn incluir la llamada a otras funciones definidas en la aplicacin. Pasando a la prctica, la sintaxis sera: function nombreFuncion(parametro1, parametro2, ... ) { sentencia1 sentencia2 ... sentenciaN } Los parmetros que se le pasan a las funciones siempre son por valor, es decir, si la funcin modifica el valor que se le pasa, esto no afecta a la variable global al terminar la ejecucin de la funcin. Si nos interesa que la funcin devuelva algn valor, debe haber una sentencia con la palabra reservada return seguida del valor a devolver.
26
Ya comentamos que es muy til definir las funciones en la cabecera del documento HTML para asegurarnos de que se cargan antes de cualquier accin del usuario. La definicin de una funcin no implica su ejecucin. La ejecucin se har al hacer una llamada a dicha funcin. Los parmetros de entrada a una funcin pueden ser cualquier tipo de variable incluso objetos enteros. El nombre de la funcin es sensible a maysculas y minsculas. Puede incluir el caracter "_" y empezar con una letra. Ejemplo: function ImprimeNombre(nombre) { document.write("<HR>Tu nombre es <B><I>") document.write(nombre) document.write("</B></I><HR>") } La variable nombre slo existe dentro de la funcin y lo mismo pasa con cualquier variable declarada dentro de la funcin. Las funciones pueden devolver un valor. Para ello: function cubo(numero) { var cubo = numero * numero * numero return cubo } Tambin podra haber sido: return numero * numero * numero Funciones recursivas Son las que se llaman a s mismas. Un ejemplo tpico es el de la funcin que calcula el factorial de un nmero: Aqu se muestra un ejemplo de una funcin recursiva: function factorial(numero) { if (numero > 1) { return numero * factorial(numero - 1) } else { return numero } } Esta funcin se basa en que el factorial de un nmero x es igual a x multiplicado por el factorial de x - 1:
27
2.8 Objetos
En JavaScript, los objetos son, esencialmente, una coleccin de propiedades y mtodos. Un mtodo es una funcin que es miembro de un objeto, y una propiedad es un valor o juego de valores (en forma de arreglo o objeto) que es miembro de un objeto. JavaScript soporta tres clase de objetos: objetos intrnsecos, objetos que usted haya creado y objetos de navegador. Un objeto, como antes ya se ha comentado es una agrupacin de variables denominadas propiedades, que pueden ser a su vez otros objetos, junto a un conjunto de mtodos o funciones que realizan operaciones con las variables propias del mismo. Existen objetos predefinidos en el navegador cliente, pero pueden definirse nuevos objetos. JavaScript utiliza toda una serie de objetos que representan los elementos del navegador, el propio navegador, el documento HTML, las imgenes, enlaces, tablas que contiene, etc. Cada uno de estos objetos est definido por sus propiedades, los datos que almacena en su interior, y por sus mtodos, es decir, las acciones que podemos realizar sobre ellos. Por ejemplo, el objeto document de JavaScript tiene un mtodo write, que permite escribir sobre este documento, y una propiedad lastmodified, que nos devuelve el texto de la fecha de la ltima modificacin del documento HTML. En el ejemplo que vimos anteriormente: document.write("Ultima modificacin en "+document.lastModified"+".") Daba como resultado que se visualizara en la pantalla la fecha de la ltima modificacin del documento. Como puede verse, para referirse tanto a los mtodos como a las propiedades, es necesario escribir su nombre despus del objeto y el caracter ".". Jerarqua de los objetos en JavaScript Para comprender realmente a fondo la programacin en JavaScript, es imprescindible conocer la jerarqua de los objetos que lo forman. Cada uno de estos objetos puede contener tres tipos de elementos: objetos de JavaScript, propiedades y mtodos. Dicha jerarqua se presenta en al figura 1.
28
Figura 1.
Para referirnos a cualquiera de estos elementos debemos usar siempre el signo "." Por ejemplo, con la sentencia window.document.form nos estamos refiriendo al objeto form, que forma parte del objeto document y que, a su vez, forma parte del objeto window. Muchos de estos objetos son en realidad arreglos de objetos, es decir, listas con todos los elementos de ese tipo que contiene el documento. En el ejemplo anterior el objeto form es un arreglo con todos las formas que hay dentro del documento. Nos podemos referir a cada uno de ellos utilizando la siguiente expresin: window.document.form[i] Donde i es el ndice del formulario al cual nos referimos. Es importante saber tambin que en el momento que creamos un elemento dentro del documento HTML, al usar el atributo NAME, este nombre nos puede servir tambin para referenciar este elemento dentro de la jerarqua en nuestro caso particular. De esta manera, si en el ejemplo anterior se tiene un formulario al cual se ha asociado el atributo NAME="miformulario", despus puede hacerse referencia a ese formulario en particular, usando la expresin: window.document.miformulario Los mtodos siempre van seguidos de parntesis, vacos en el caso de que no tengan parmetros. En la parte ms alta de esta jerarqua se sitan dos objetos, por una parte window, que es el objeto que contiene todo el resto de objetos de la jerarqua. Por otra est el objeto navigator que ms adelante se va a presentar. JavaScript cuenta con un amplio nmero de objetos que representan elementos grficos en un documento HTML, la siguiente tabla resume los ms importantes.
29
Link
Location Math Password
RadioButton
Reset Selection String Submit
Text
TextArea
Window
Referencias
http://hotwired.lycos.com/webmonkey/98/03/index2a.html http://www.wdvl.com/Authoring/JavaScript/Tutorial/variables.html http://www.pageresource.com/jscript/jvar.htm http://www.elcodigo.net/index.htm http://www.webestilo.com/javascript/js32.phtml http://www.iua.upf.es/~dani/docs/js/sesion4.htm
30
Figura 1.
Es importante hace notar que la clusula else es opcional y que la condicin puede ser cualquier expresin de JavaScript que retorne un valor true o false. La sentencia que ser ejecutada puede ser cualquier expresin de JavaScript, incluso nuevas sentencias tipo if, desarrollando as un cdigo fuente de sentencias if...else anidadas.
31
Ejemplo: function libros(editorial) { if(editorial=="McGrawHill") { document.write("La editorial que usted busca es: "+editorial+".") } else { if(editorial=="AddissonWesley") { document.write("La editorial que usted busca es:"+editorial+".") } else { } } document.write("La editorial que usted busca es:"+editorial+".")
Es importante tener en cuenta que las instrucciones dentro de la condicin deben ir siempre entre llaves "{", "}". No hay una palabra "then" como en otros lenguajes. Hay que resaltar el uso del operador de comparacin "==" (es igual a) y "!=" (es diferente a). If (mi_edad==30) { //instrucciones } La condicin debe ir siempre entre parntesis "()". if (mi_edad==30) { // } else if(mi_edad>30) { // }else if (mi_edad<30) { // } Se puede utilizar un conjunto de instrucciones delimitadas por llaves. Es decir: { Instruccin 1; Instruccin 2; ... Instruccin N;
32
3.1.2 Sentencia Switch La siguiente estructura bifurca segn los distintos valores que pueda tomar una variable especfica. Es la sentencia switch. La sentencia switch permite al programa evaluar una expresin y compararla con cada una de las etiquetas asociadas a la sentencia switch. Si se encuentra una igualdad, el programa pasar a evaluar la expresin asociada con esa etiqueta. La sentencia switch se define de la forma siguiente:
Figura 2.
switch ( Expresin ) { case Valor 1: Instruccin o bloque de instrucciones; [break;] case Valor 2: Instruccin o bloque de instrucciones; [break;] case Valor 3: Instruccin o bloque de instrucciones; [break;] ... case Valor N: Instruccin o bloque de instrucciones; [break;] } [default:]Instruccin o bloque de instrucciones;
La expresin entre parntesis del switch debe ser del mismo tipo que los valores. Su resultado se comparar con los distintos valores del case. Si coincide con uno de ellos se pasar a la instruccin siguiente al case con dicho valor y se seguirn ejecutando las instrucciones consecutivas hasta encontrar una instruccin break o alcanzar el cierre de llaves del switch. En caso de que el resultado de la expresin no coincida con ningn valor se pasar la ejecucin a la instruccin siguiente de la etiqueta default, si la hubiera, y se continuar como un case. Los valores en los case deben ser una expresin constante. No puede haber dos case con el mismo valor.
33
La sentencia break asociada a cada una de las etiquetas asegura que el programa finalizar la ejecucin del switch una vez que se haya ejecutado una de las sentencias. Si se omite esta sentencia, el programa continuar su ejecucin de forma habitual. Ejemplo: switch (expr) { case "McGrawHill": document.write("La editorial que usted busca es McGraw-Hill"); break; case "AddissonWesley": document.write("La editorial que usted busca es Addisson Wesley"); break; case "Paraninfo"; document.write("La editorial que usted busca es Paraninfo"); break; default: document.write("La editorial que usted busca es Marcombo B.");
El siguiente ejemplo utiliza la funcin alert(), la cual abre una ventana de aviso, con el texto que se pasa como parmetro, dependiendo del valor de la variable, en este caso profesorPreferido: switch (profesorPreferido) { case "Victor Castillo": alert('Eso es tener buen gusto'); break; case "Gildardo Perez": alert('Parece que no tienes buen gusto); break; default: alert('Y ese quin es?'); }
3.2 Ciclos
Otras estructuras de control que permite manejar JavaScript son los ciclos, ms comnmente conocidos como bucles. Un bucle es una estructura que permite repetir una tarea un nmero de veces, determinado por una condicin. Para hacer bucles podemos utilizar las estructuras for, while y do...while.
34
3.2.1 Sentencia For (Repeticin de un nmero dado de veces) Muchas veces necesitamos repetir una instruccin o sentencia varias veces, con un contador variable. Este bucle nos permite hacer esto. Como se ver ms adelante, tiene una sintaxis muy parecida a la de C/C++.
Figura 3.
Un bucle de tipo for se ejecuta hasta que una determinada condicin se evala como falsa. La estructura de esta sentencia se da a continuacin: for (expresin inicial];[condicin];[expresin de incremento]) { //acciones } La ejecucin de una sentencia for se da de la forma siguiente: 1. La expresin de inicializacin (expresin inicial) se ejecuta. Esta expresin suele inicializar uno o ms contadores del bucle, aunque la sintaxis utilizada permite cualquier tipo de complejidad. 2. Evaluacin de la condicin del bucle. Si el valor de la condicin es verdadera, se ejecutan las sentencias contenidas en el programa; en caso contrario el bucle finaliza. 3. Ejecucin de las sentencias. 4. Evaluacin de la expresin de incremento, de manera que posteriormente se retorna al paso dos. Ejemplo: for (var i=1;i<=10;i++) { //sentencias }
35
Este bucle se ejecutaria 10 veces con el valor de la variable i desde 1 hasta 10. El operador ++ sirve para incrementar la variable i , es equivalente a i=i+1. Utilizando la sentencia break podemos interrumpir la ejecucin de un bucle: Ejemplo: for (var i=1;i<=10;i++) { if (i>5) { break } } En este ejemplo el bucle se realizara slo 5 veces ya que la condicin i>5, obliga a salir del bucle. Ejemplo: var numero = 4; for (n = 2, factorial = 1; n <= numero; n++) factorial *= n; 3.2.2 Sentencia While (Repeticin mientras se cumpla una condicin)
Figura 4.
La sentencia while se ejecuta siempre y cuando la condicin de finalizacin retorne el valor de verdadero. La estructura de esta sentencia es la siguiente: while (condicin) { } //acciones;
La condicin de finalizacin se evala antes de que el programa sea ejecutado. En el caso que la condicin retorne el valor de verdadero, las sentencias contenidas en el bucle se
36
ejecutan de forma secuencial, mientras que si se retorna el valor de falso el programa finaliza la ejecucin del bucle. Ejemplo: var i=0; while (i<=5) { document.write("Este es el bucle nmero "+i+"."); i++; } Ejemplo: cont=0 while( cont<10 ) { document.write(cont+"<br>"); cont++; } IMPORTANTE!!! Es peligroso utilizar un bucle while o do...while (se ver ms adelante) si la condicin se cumple siempre, entraramos en un bucle infinito. Siempre debemos modificar el valor de la condicin internamente. 3.2.3 Sentencia Do...While (Repeticin hasta que se cumpla una condicin) La sentencia do...while se repite hasta que una determinada condicin se evala como falsa. La estructura de esta sentencia se da a continuacin:
Figura 5.
do { //instrucciones; } while (condicin) El programa se ejecuta una vez antes de que se compruebe la condicin de finalizacin. Si la condicin retorna el valor verdadero, la sentencia se ejecuta otra vez. Al final de cada
37
ejecucin del bucle, se comprueba la condicin, de manera que si sta es falsa, finaliza la ejecucin del ciclo. Ejemplo: do { i+=1; document.write(i); }while (i<5); IMPORTANTE!!! Hay que resaltar que do...while no pertenece al estndar y no es soportado por el Explorer 3. 3.2.4 Sentencia Label La sentencia label es utilizada como un identificador, al cual se puede hacer referencia desde cualquier parte del programa. De esta forma, se puede hacer referencia a un bucle a partir de una etiqueta, as como tambin utilizar la sentencia break o continue para indicar cundo el programa debe ser interrumpido o continuar su ejecucin. La sintaxis de la sentencia label se da a continuacin: label :{ //acciones; } El valor de la sentencia label puede ser cualquier identificador que no sea utilizado como palabra reservada en JavaScript. 3.2.5 Sentencia Break La sentencia break ordena a JavaScript que finalice la ejecucin de un bucle, una sentencia switch o label. Algunos bucles finalizan su trabajo cuando se encuentran con cierta condicin, en ese momento ya no hay necesidad de continuar el bucle. Un caso tpico es aquel en el que se establece un bucle para un array completo en busca de una nica entrada que cumpla cierto criterio. El criterio habitual es establecerlo con una construccin if dentro del bucle. En el caso que se cumpla esta condicin, se interrumpe la ejecucin del bucle, de manera que el script saldr del flujo principal. Para completar esta salida del bucle, se utiliza la orden break. A continuacin se establece un ejemplo de la utilizacin de este tipo de sentencia: Ejemplo: for (var i=1; i<=array.length; i++) { if(array[i].editorial=="McGrawHill") { document.write("La editorial"+array[i].editorial+" tiene buenos libros " ); break; } }
38
La orden break ordena a JavaScript que salga del bucle for ms inmediato (en caso que existan otros bucles for anidados). La ejecucin del cdigo fuente se retoma de nuevo despus de la ltima llave del bucle. El valor de la variable i mantiene el valor que tena cuando se produjo la interrupcin, de modo que se pueda utilizar esta variable posteriormente en el mismo script para, por ejemplo, acceder a este elemento de la matriz. 3.2.6 Sentencia Continue La sentencia continue es utilizada para saltar la ejecucin de las sentencias anidadas en una estructura de control para una condicin dada. Las estructuras a las cuales se les puede aplicar la sentencia continue son: switch o label, for, while, do-while. Al igual que para la sentencia break, un caso comn suele ser aquel en el que se saltan las instrucciones a realizar para una condicin determinada del bucle. Esto es, segn se va realizando el bucle ciclo a ciclo, ejecutando las rdenes para cada valor del contador del bucle, puede existir un valor de ese contador al cual no se desea se apliquen las rdenes de ejecucin. Para llevar a cabo esta tarea, las rdenes de ejecucin necesitan incluir una condicin if que detecte la presencia de ese valor. Cuando se evala ese valor, la orden continue implica que se salten inmediatamente el resto de rdenes, que se ejecute la orden de actualizacin y se vuelva al principio del bucle (saltando tambin la parte de la orden de condicin de los parmetros del bucle). A continuacin se realiza un ejemplo de utilizacin de la sentencia continue. Ejemplo: for (var i=1, i<=array.length, i++) { if (array[i].editorial=="AddissonWesley") { continue; } //acciones; } En este ejemplo, la parte de rdenes del bucle se ejecuta para todos los elementos del array, exceptuando el referido a la editorial McGrawHill. La orden continue obliga a la ejecucin a que salte la parte i++ de la estructura del bucle, incrementando el valor de i para el siguiente ciclo. En el caso de existir bucles for anidados, una orden continue afecta al bucle inmediato en el que se encuentra la construccin if y while.
Referencias
http://html.programacion.net/js/flujo.htm http://www.telyse.net/telyse/areatecnica/manuales/js/capitulo9.html http://www.iua.upf.es/~dani/docs/js/sesion2.htm http://www.cicei.ulpgc.es/gsi/tutorial_javascript/cap4.html
39
40
y para referenciar al elemento que ocupa la posicin (i,j), escribiremos a[i][j]; Propiedades length. Esta propiedad nos dice en cada momento la longitud del arreglo, es decir, cuntos elementos tiene. prototype. Nos permite asignar nuevas propiedades al objeto Array. Mtodos join(separador). Une los elementos de las cadenas de caracteres de cada elemento de un arreglo en una cadena, separando cada cadena por el separador especificado. reverse(). Invierte el orden de los elementos del arreglo. sort(). Ordena los elementos del arreglo siguiendo el orden lexicogrfico. Ejemplo: <Html> <Head> <Title> Ejemplo de Arreglos</Title> </Head> <Body> <Script Language="JavaScript"> <!-var j=new Array(2),h=new Array(1), i=new Array(1,"Hola",3); var b=new Array("Palabra","Letra","Amor","Color","Cario"); var c=new Array("Otra cadena con palabras"); var d=new Array(false); j[0]=new Array(3); j[1]=new Array(2); j[0][0]=0; j[0][1]=1; j[0][2]=2; j[1][0]=3; j[1][1]=4; j[1][2]=5; document.write(c); document.write("<P>"+d+"<P>"); document.write("j[0][0]="+j[0][0]+"; j[0][1]="+j[0][1]+ "; j[0][2]="+j[0][2]+"<BR>"); document.write("j[1][0]="+j[1][0]+"; j[1][1]="+j[1][1]+ "; j[1][2]="+j[1][2]); document.write("<P>h= "+(h[0]='Hola')+"<P>"); document.write("i[0]="+i[0]+"; i[1]="+i[1]+"; i[2]="+i[2]+"<P>"); document.write("Antes de ordenar: "+b.join(', ')+"<P>"); document.write("Ordenados: "+b.sort()+"<P>"); document.write("Ordenados en orden inverso: "+b.sort().reverse()); //--> </Script> </Body> </Html>
41
42
setTime(milisegundos). Pone la fecha en el objeto Date que se est usando. El parmetro representa la cantidad de milisegundos transcurridos a partir del 1 de enero de 1970. setYear(ao). Pone el ao actual en el objeto Date que se est utilizando. toGMTString(). Devuelve una cadena que usa las convenciones de Internet con la zona horaria GMT. Aqu se muestra un ejemplo del uso de objeto Date: fecha =new Date(); var ao= fecha.getYear(); var meses= new Array ('enero','febrero','marzo','abril','mayo','junio','julio','agosto', 'septiembre','octubre','noviembre','diciembre'); var diasemana = new Array ('Domingo','lunes','martes','miercoles','jueves','viernes','sabado'); document.write("Hoy es: " +diasemana[fecha.getDay()]+" " +fecha.getDate()+ " de " +meses[fecha.getMonth()]+" del " +ao[fecha.getYear()]; Este ejemplo al ejecutarlo en el navegador dir el da, mes y ao en el que se est. As como este ejemplo, se puede ir probando con cada uno de los mtodos de Date y hacer ejercicios.
43
name. Contiene el nombre de la ventana, o del frame actual. opener. Es una referencia al objeto Window que lo abri, si la ventana fue abierta usando el mtodo open() que veremos cuando estudiemos los mtodos. parent. Referencia al objeto Window que contiene el frameset. self. Es un nombre alternativo del window actual. status. String con el mensaje que tiene la barra de estado. top. Nombre alternativo de la ventana del nivel superior. window. Igual que self: nombre alternativo del objeto Window actual. Mtodos alert(mensaje). Muestra el mensaje 'mensaje' en un cuadro de dilogo. blur(). Elimina el foco del objeto Window actual. A partir de NS 3, IE 4. clearInterval(id). Elimina el intervalo referenciado por 'id' (ver el mtodo setInterval(), tambin del objeto Window). A partir de NS 4, IE 4. clearTimeout(nombre). Cancela el intervalo referenciado por 'nombre' (ver el mtodo setTimeout(), tambin del objeto Window). confirm(mensaje). Muestra un cuadro de dilogo con el mensaje 'mensaje' y dos botones, uno de aceptar y otro de cancelar. Devuelve true si se pulsa aceptar y devuelve false si se pulsa cancelar. focus(). Captura el foco del ratn sobre el objeto Window actual. A partir de NS 3, IE 4. open(URL,nombre,caracteristicas). Abre la URL que le pasemos como primer parmetro en una ventana de nombre 'nombre'. Si esta ventana no existe, abrir una ventana nueva en la que mostrar el contenido con las caractersticas especificadas. Otras operaciones que podemos elegir para la ventana son las siguientes: prompt(mensaje,respuesta_por_defecto). Muestra un cuadro de dilogo que contiene una caja de texto en la cual podremos escribir una respuesta a lo que nos pregunte en 'mensaje'. El parmetro 'respuesta_por_defecto' es opcional, y mostrar la respuesta por defecto indicada al abrirse el cuadro de dilogo. El mtodo retorna una cadena de caracteres con la respuesta introducida. scroll(x,y). Desplaza el objeto Window actual a las coordenadas especificadas por (x,y). A partir de NS 3, IE 4. scrollBy(x,y). Desplaza el objeto Window actual el nmero de pixeles especificado por (x,y). A partir de NS 4. scrollTo(x,y). Desplaza el objeto Window actual a las coordenadas especificadas por (x,y). A partir de NS 4. setInterval(expresion,tiempo). Evala la expresin especificada despus de que haya pasado el nmero de milisegundos especificados en tiempo. Devuelve un valor que puede ser usado por clearInterval(). A partir de NS 4, IE 4.
44
setTimeout(expresion,tiempo). Evala la expresin especificada despus de que haya pasado el nmero de milisegundos especificados en tiempo. Devuelve un valor que puede ser usado por clearTimeout(). A partir de NS 4, IE 4. En este ejemplo mostramos cmo acceder a los frames y cmo se pueden cambiar propiedades de un frame en otro. Ejemplo 1: <Html> <Head> <Title>Ejemplo de frame</Title> </Head> <frameset cols="50%,*"> <frame name="izq" src="ejemplo1a.html" scrolling="auto"> <frameset rows="50%,*"> <frame name="der1" src="ejemplo1b.html" crolling="auto"> <frame name="der2" src="ejemplo1c.html" scrolling="auto"> </frameset> </frameset> </Html> Ejemplo 2: <Html> <Head> <Title> Segundo ejemplo de frame</Title> <Script Language="JavaScript"> <!-function color() { top.frames['der1'].document.bgColor="#FF5500"; } function cargarYahoo() { top.frames['der2'].location='http://www.yahoo.com'; } //--> </Script> </Head> <Body> <Script Language="JavaScript"> <!-var i=0; document.write('<h1>Soy el frame: ' + window.name + "</h1><br>"); for (i=0;i<top.frames.length;i++) document.write('Nombre del frame ' + i + ': ' + top.frames[i].name + "<br>"); //-->
45
</Script> <br><br> <a href="javascript:color()">Cambia el color del frame <b>der1</b></a><br><br><br> <a href="javascript:cargarYahoo()">Cargar Yahoo!! en el frame <b>der2</b></a><br> </Body> </Html>
46
clearTimeout(nombre). Cancela el intervalo referenciado por 'nombre' (ver el mtodo setTimeout(), tambin del objeto Window). close(). Cierra el objeto Window actual. Confirm(mensaje). Muestra un cuadro de dilogo con el mensaje 'mensaje' y dos botones, uno de aceptar y otro de cancelar. Devuelve verdadero si se pulsa aceptar y devuelve falso si se pulsa cancelar. focus(). Captura el foco del ratn sobre el objeto window actual. A partir de NS 3, IE 4. moveBy(x,y). Mueve el objeto Window actual el nmero de pixeles especificados por (x,y). A partir de NS 4. moveTo(x,y). Mueve el objeto window actual a las coordenadas (x,y). A partir de NS 4. open(URL,nombre,caracteristicas). Abre la URL que le pasemos como primer parmetro en una ventana de nombre 'nombre'. Si esta ventana no existe, abrir una ventana nueva en la que mostrar el contenido con las caractersticas especificadas. Las caractersticas que podemos elegir para la ventana que queramos abrir son las siguientes: - toolbar = [yes|no|1|0]. Nos dice si la ventana tendr barra de herramientas (yes,1) o no la tendr (no,0). - location = [yes|no|1|0]. Nos dice si la ventana tendr campo de localizacin o no. - directories = [yes|no|1|0]. Nos dice si la nueva ventana tendr botones de direccin o no. - status = [yes|no|1|0]. Nos dice si la nueva ventana tendr barra de estado o no. - menubar = [yes|no|1|0]. Nos dice si la nueva ventana tendr barra de mens o no. - scrollbars = [yes|no|1|0]. Nos dice si la nueva ventana tendr barras de desplazamiento o no. - resizable = [yes|no|1|0]. Nos dice si la nueva ventana podr ser cambiada de tamao (con el ratn) o no. - width = px. Nos dice el ancho de la ventana en pixeles. - height = px. Nos dice el alto de la ventana en pixeles. - outerWidth = px. Nos dice el ancho *total* de la ventana en pixeles. A partir de NS 4. - outerHeight = px. Nos dice el alto *total* de la ventana el pixeles. A partir de NS 4. - left = px. Nos dice la distancia en pixeles desde el lado izquierdo de la pantalla a la que se debe colocar la ventana. - top = px. Nos dice la distancia en pixeles desde el lado superior de la pantalla a la que se debe colocar la ventana. prompt(mensaje,respuesta_por_defecto). Muestra un cuadro de dilogo que contiene una caja de texto en la cual podremos escribir una respuesta a lo que nos pregunte en 'mensaje'. El parmetro 'respuesta_por_defecto' es opcional, y mostrar la respuesta por
47
defecto indicada al abrirse el cuadro de dilogo. El mtodo retorna una cadena de caracteres con la respuesta introducida. scroll(x,y). Desplaza el objeto Window actual a las coordenadas especificadas por (x,y). A partir de NS 3, IE 4. scrollBy(x,y). Desplaza el objeto Window actual el nmero de pixeles especificado por (x,y). A partir de NS 4. scrollTo(x,y). Desplaza el objeto Window actual a las coordenadas especificadas por (x,y). A partir de NS 4. setInterval(expresion,tiempo). Evala la expresin especificada despus de que haya pasado el nmero de milisegundos especificados en tiempo. Devuelve un valor que puede ser usado por clearInterval(). A partir de NS 4, IE 4. setTimeout(expresion,tiempo). Evala la expresin especificada despus de que haya pasado el nmero de milisegundos especificados en tiempo. Devuelve un valor que puede ser usado por clearTimeout(). A partir de NS 4, IE 4. Ejemplo: <Html> <Head> <Title>Ejemplo del objeto window</Title> <Script Language="JavaScript"> <!-function moverVentana() { mi_ventana.moveBy(5,5); i++; if (i<20) setTimeout('moverVentana()',100); else mi_ventana.close(); } //--> </Script> </Head> <Body> <Script Language="JavaScript"> <!-var opciones="left=100,top=100,width=250,height=150", i= 0; mi_ventana = window.open("","",opciones); mi_ventana.document.write("Una prueba de abrir ventanas"); mi_ventana.moveTo(400,100); moverVentana(); //--> </Script> </Body> </Html>
48
tan(numero). Devuelve la tangente de 'numero' (que debe estar en radianes) o NaN. <Html> <Head> <Title> Ejemplo de Math </Title> </Head> <Body> <Script Type="text/javascript" Language="JavaScript"> <!-var a=15, b=4, c=0, d=7, e,f,g; e= Math.sin(a*3*Math.PI/180); f= Math.cos(a*3*Math.PI/180); g= Math.tan(a*3*Math.PI/180); document.write("El valor del seno de "+ (a*3)+"es "+ e+"<br>"); document.write("El valor del coseno de "+ (a*3)+"es "+ f+"<br>"); document.write("El valor de la tangente de "+ (a*3)+"es "+ g+"<br>"); document.write("El valor del coseno de "+ (a*3)+"es "+ (1/e)+"<br>"); document.write("El valor del cosecante de "+ (a*3)+"es "+ (1/f)+"<br>"); document.write("El valor de la cotangente de "+ (a*3)+"es "+ (1/g)+"<br>"); //--> </Script> </Body> </Html> Nota. Las funciones sin,cos,tan,sec,csc,cot, deben convertirse a radianes y multiplicarse por (Math.PI/180)*/
plugins. Arreglo que contiene todos los plug-ins soportados por el cliente. A partir de NS 3. UserAgent. Cadena que contiene la cabecera completa del agente enviada en una peticin HTTP. Contiene la informacin de las propiedades appCodeName y appVersion. Mtodos javaEnabled(). Devuelve verdadero si el cliente permite la utilizacin de Java, en caso contrario, devuelve falso. Ejemplo: <Html> <Head> <Title>Ejemplo del Objeto Navigator</Title> </Head> <Body> <Script Language="JavaScript"> <!-document.write("Navegador <b>appCodeName</b>: " + navigator.appCodeName + "<br>"); document.write("Navegador <b>appName</b>: " + navigator.appName + "<br>"); document.write("Navegador <b>appVersion</b>: " + navigator.appVersion + "<br>"); document.write("Navegador <b>language</b>: " + navigator.language + "<br>"); document.write("Navegador <b>platform</b>: " + navigator.platform + "<br>"); document.write("Navegador <b>userAgent</b>: " + navigator.userAgent + "<br>"); //--> </Script> </Body> </Html>
Referencias
http://webestilo.com/javascript/js32.phtml http://www.elcodigo.net/index2.html http://www.iua.upf.es/~dani/docs/js/sesion4.htm
51
Cuando el usuario detiene la carga onAbort de imgenes (por ejemplo hacer clic en el botn Detener). Cuando el usuario remueve el foco onBlur de ventanas o elementos de un formulario. onChange
Blur
Change
TextField, Cuando el usuario cambia el valor TextArea, Select y del elemento. List
52
Click
onClick
DragDrop
Cuando el usuario arrastra un objeto onDragDrop sobre la ventana del navegador, tal como arrastrar un archivo sobre la ventana del navegador. Cuando la carga de un documento o onError una imagen causa un error. Cuando el usuario da el foco a una ventana o un elemento de un formulario. onFocus
Error Focus
Document, Image, Cuando el usuario presiona una Link y TextArea tecla. Document, Image, Cuando el usuario presiona o Link y TextArea mantiene presionada una tecla. Document, Image, Cuando el usuario suelta una tecla. Link y TextArea Body de un documento
Cuando el usuario carga una pgina onLoad en el Navegador. onMouseDown onMouseMove onMouseOut
MouseDown Document, Button Cuando el usuario presiona un y Link botn del ratn. MouseMove Nada por omisin. MouseOut Area y Link Cuando el usuario mueve el cursor del ratn. Cuando el usuario mueve el cursor fuera de un mapa de imagen del lado del cliente o una liga. Cuando el usuario mueve el cursor del ratn sobre una liga.
MouseOver MouseUp
Link
onMouseOver
Document, button Cuando el usuario levanta un botn onMouseUp y Link del ratn.
53
onMove
Cuando el usuario limpia una forma onReset (usando el botn Reset). Cuando el usuario o un cdigo cambia el tamao de una ventana. onResize
Cuando el usuario selecciona un onSelect campo de entrada de un formulario. Cuando el usuario enva un formulario. Cuando un usuario se cambia de la pgina actual.
Tabla 1.
onSubmit onUnload
La programacin de eventos con JavaScript se presenta como un conjunto de opciones adicionales a las etiquetas que ya existen. Por ejemplo, la siguiente liga hace referencia a la pgina de la UNAM: <A HREF="http://www.unam.mx">Liga a la UNAM</A> Si adems se requiere incorporar el manejo de eventos para al pasar el apuntador del ratn sobre ella, la opcin para la liga ser dada como sigue: <A HREF="http://www.unam.mx" onMouseOver=" cdigo de JavaScript - >Liga a la UNAM</A> La palabra onMouseOver seala un manejador de eventos, entre comillas dobles se indica algn cdigo de JavaScript que se desea ejecutar cuando ocurra el evento. Cabe sealar que slo cuando se efecte el evento se ejecuta el cdigo asociado. Para aplicar de forma efectiva los datos de la Tabla 1, se requiere entonces, incorporar el manejador de eventos para la etiqueta correspondiente. Cabe sealar que cada etiqueta cuenta con su propio juego de manejadores de eventos si es que hay algn evento que pueda programarse. En las siguientes secciones se presentar cdigo para el manejo de eventos de botones, ligas, frames y ventanas.
54
Figura 1.
El cdigo inicial de nuestro ejemplo se muestra a continuacin: <Html> <Head> <Title> Mensaje </Title> </Head> <Body> <Form> <Input Type="button" value="Mensaje"> </Form> </Body> </Html> Este cdigo lo nico que muestra al usuario es un botn con la etiqueta Mensaje. Para el caso de nuestro ejemplo, el formulario no tiene otro fin ms que el de presentar dicho botn y no est asociado a ningn programa CGI. La lnea correspondiente es: <INPUT
TYPE="button" VALUE="Mensaje">
En JavaScript existe un tipo especial de ventanas para mensajes, las cuales son presentadas usando la instruccin alert(). Por ejemplo, alert(Saludos!!!) muestra la ventana de mensaje con la etiqueta Saludos!!!. Ver figura 2.
Figura 2.
Entonces el evento que deseamos usar es el clic sobre un botn. Por la Tabla 1 sabemos que el manejador de eventos correspondiente es onClick. Por lo que la lnea del botn se deja de la siguiente forma: <INPUT TYPE="button" VALUE="Mensaje" onClick="alert ( 'Saludos!!!' )" >
55
Dando el resultado de interaccin deseado. Cabe sealar que los mtodos pueden recibir cadenas pero stas se indican usando comillas simples () y nunca comillas dobles (). Con este ejemplo, tambin puede apreciarse la declaracin del manejador de eventos y la ejecucin del cdigo de presentacin de la ventana. Las funciones que pueden emplearse en un cdigo relacionado con un evento dado, pueden ser propias de JavaScript, o bien, definidas por nosotros. Supongamos que definimos la funcin suma( ), la cual presenta una ventana de mensaje con el resultado de sumar 2 con 3, tal como se muestra en el siguiente cdigo. function suma ( ) { alert ( 2 + 3 ); } La relacin se dar entonces por la siguiente asociacin del manejador de eventos: <INPUT TYPE="button" VALUE="Suma 2 + 3" onClick="suma ( )" > El resultado se muestra en la figura 3.
Figura 3.
El cdigo completo se muestra a continuacin: <Html> <Head> <Title> Ventana suma </Title> <Script Language="JavaScript"> <!-function suma ( ) { alert ( 2 + 3 ); } //--> </Script> </Head> <Body> <Form> <Input Type="button" value="Suma 2 + 3" onclick="suma ( )" > </Form> </Body> </Html>
56
Si se desea realizar la suma, pero ahora de dos valores que el usuario proporciona mediante dos campos de texto, quedar tal y como se muestra en la figura 4.
Figura 4.
El posible cdigo de la funcin suma( ) y el manejador de eventos podra ser el siguiente: function suma ( ) { x = document.formaSuma.sumando1.value y = document.formaSuma.sumando2.value document.formaSuma.resultado.value = x + y } <form name="formaSuma" > sumando 1: <input type="text" name="sumando1" ><br> sumando 2: <input type="text" name="sumando2" ><br> resultado: <input type="text" name="resultado" ><br> <input type="button" value="Suma campos" onclick="suma()" > </form> El resultado de dicho cdigo se muestra en la figura 5.
Figura 5.
57
A primera vista parecera que hay un error en el cdigo que genera el resultado de la operacin, pero no es as. El problema se origina porque los tipos de valores que se asignan a x y a y son cadenas de caracteres, de esta manera la operacin concatena ambas cadenas. La solucin a nuestro problema entonces es convertir las cadenas en nmeros a fin de poder efectuar la suma de nmeros. Para esto JavaScript define dos operaciones de traduccin de cadenas a nmeros: parseInt ( ) y parseFloat ( ).En nuestro ejercicio usaremos la primera, modificando el cdigo de suma de la siguiente forma: function suma ( ) { x = document.formaSuma.sumando1.value y = document.formaSuma.sumando2.value document.formaSuma.resultado.value = parseInt ( x ) + parseInt ( y ) } El cdigo funciona si ambos valores representan nmeros. En otro caso existen dos posibilidades, la primera es que alguna de las cadenas comience con un nmero, en cuyo caso el valor de la conversin ser dicho nmero. El segundo caso es que la cadena no puede convertirse en un nmero, por lo que el resultado de la suma ser NaN Not a Number (no es un nmero). El cdigo completo se muestra a continuacin: <Html> <Head> <Title> Ventana suma dos datos </Title> <Script Language="Javascript"> <!-function suma ( ) { x = document.formaSuma.sumando1.value y = document.formaSuma.sumando2.value document.formaSuma.resultado.value = parseInt ( x ) + parseInt ( y ) } //--> </Script> </Head> <Body> <Form name="formaSuma" > sumando 1: <input type="text" name="sumando1" ><br> sumando 2: <input type="text" name="sumando2" ><br> resultado: <input type="text" name="resultado" ><br> <input type="button" value="Suma campos" onclick="suma()" > </Form> </Body> v</Html>
58
Figura 6.
Figura 7.
Para el primer cambio, se tomar en cuenta el siguiente cdigo HTML para la imagen. <IMG SRC="Imgs/bt1.gif" WIDTH="100" HEIGHT="40" BORDER=0 ALT="" NAME="btInicio" > En este caso la imagen y los datos que nos interesan sern los siguientes:
59
Donde el Nombre indica el identificador de la imagen y SRC es el URL inicial del archivo de la misma. El manejador de eventos onMouseOver tiene entonces el objetivo de cambiar el URL de la imagen a fin de que la imagen de el efecto de cambio. El cdigo asociado al onMouseOver ser entonces el siguiente: onMouseOver="btInicio.src='imgs/bt2.gif'" Lo que falta ahora es que una vez que el apuntador del ratn ya no se encuentre sobre la liga la imagen del botn sea la misma que demostraba originalmente. Para este efecto se debe utilizar un segundo manejador de eventos denominado onMouseOut. El onMouseOut se llama a ejecutar cuando el cursor del ratn sale de la liga. En nuestro caso el cdigo asociado ser el siguiente: onMouseOut="btInicio.src='imgs/bt1.gif'" El cdigo completo se muestra a continuacin. <Html> <Head> <Title> Cambio de imgenes </Title> </Head> <Body> <Hr> <a href=http://www.unam.mx/ onmouseover="btinicio.src='imgs/bt2.gif'" onmouseout="btinicio.src='imgs/bt1.gif'" ><img src="Imgs/bt1.gif" width="100" height="40" border=0 alt="" name="btInicio" ></a> <Hr> </Body> </Html>
Los manejadores de eventos para una ventana se listan a continuacin: - onBlur: cuando la ventana pierde el foco. - onDragDrop: Cuando se efectan operaciones de arrastre de objetos sobre la ventana. - onError: cuando ocurre un error al cargar la ventana. - onFocus: cuando la ventana gana el foco. - onLoad: cuando se carga la pgina en la ventana. - onMove: cuando el usuario mueve la ventana. - onResize: cuando se cambia de tamao la ventana. - onUnLoad: cuando se cierra la ventana, o bien, se cambia de pgina. Dichos manejadores se pueden ubicar en las etiquetas BODY y FRAMESET, tal como se indic. Debido al uso y utilidad que se les da en la prctica a los manejadores, en la presente seccin se analizarn nicamente onLoad y onUnLoad. La principal utilidad que actualmente tienen los manejadores onLoad y onUnLoad es la de presentar otras pginas, en sus respectivas ventanas, al cargar o retirarse de una pgina en particular. Este efecto puede ser poco recomendable, sobre todo si las nuevas ventanas que aparecen cuentan con la misma programacin, es decir, que presenten ms pginas. Para este ejemplo contamos con las siguientes condiciones. Se desea que al abrir la pgina se presente en una nueva ventana de navegador la pgina de la UNAM y al cerrar o cambiar de pgina se presente la pgina de la DGSCA. La primera parte quedara como sigue: onLoad="open('http://www.unam.mx/', '')" Es decir, al momento de cargar la pgina (y slo es una vez), se abre una nueva ventana y entonces se presenta la pgina de la UNAM. La figura 8 muestra esta parte de la implementacin.
Figura 8.
61
Para la segunda condicin se muestra el cdigo correspondiente cuyo funcionamiento se presenta en la figura 9. onUnLoad="open('http://www.dgsca.unam.mx/', '')"
Figura 9.
Al igual que en el caso anterior este cdigo va con la etiqueta BODY. El cdigo completo de este ejemplo se muestra a continuacin. <Html> <Head> <Title> Abriendo imgenes al cargar y dejar esta pgina </Title> </Head> <Body onLoad="open('http://www.unam.mx/', '')" onunload="open('http://www.dgsca.unam.mx/', '')" > <Hr> Pgina con manejadores <b>onload</b> y <b>onunLoad</b>. <Hr> </Body> </Html> Con los manejadores de eventos que se han presentado hasta el momento lo que resta es aplicarlos en problemas particulares, a fin de obtener los beneficios que el lenguaje ofrece a los programadores. En el siguiente captulo se presentan tcnicas ms detalladas y problemas especiales para incorporarlos a las pginas Web.
Referencias
http://developer.netscape.com/ http://www.javascriptkit.com/javatutors/index.shtml
62
63
disponible, ya que de lo contrario no se cargar funcin alguna. Es posible declarar ms de una vez este tipo de cdigo en las pginas Web, para cargar ms de un archivo con funciones. Las extensiones de estos archivos tienen la extensin .js por lo general. Cabe sealar que no debe considerarse ningn cdigo de JavaScript entre las etiquetas <SCRIPT> y </SCRIPT>, ya que en el caso de poner algn cdigo, este ser omitido por el navegador y no se procesar. Con todas las indicaciones anteriores se puede crear un archivo que contenga todas las funciones que se han desarrollado para tenerlas a disposicin. El siguiente cdigo corresponde al archivo bibliotecafunciones.js que se utilizar en las siguientes secciones del presente captulo. /* bibliotecafunciones.js */ function esNetscape ( ) { if ( navigator.appName.indexof ( 'Netscape' ) != -1 ) { return true } else { return false } } function cambia ( imagen, archivo ) { imagen.src = archivo } La funcin cambia( ) tiene por objetivo el de cambiar el URL de una imagen, los parmetros imagen y archivo corresponden a dichos elementos. Con esta biblioteca se puede ahora generar una pgina que cumpla con dos funcionalidades especficas: - Al cargar la pgina presentar el tipo de navegador que se utiliza. - Cambiar una imagen por otra al tenerla como una liga. El cdigo propuesto para dicha pgina se presenta a continuacin. <Html> <Head> <Title> usando la biblioteca de funciones </Title> <Script Language="JavaScript" SRC="bibliotecafunciones.js" ></Script> </Head> <Body onLoad="if ( esnetscape ( ) ) { alert('estas usando netscape') } else { alert('no estas usando netscape') }" > <h1>biblioteca de funciones</h1> <Hr> <A Href=http://www.unam.mx/ onMouseOver="cambia( boton, 'Imgs/bt2.gif' )" onMouseOut="cambia( boton, 'Imgs/bt1.gif' )"
64
><img src="Imgs/bt1.gif" width="100" height="40" border=0 alt="" name="boton" ></A> </Body> </Html> El cdigo asociado al manejador onLoad resulta ser una estructura if else, que muestra una ventada dependiendo del valor de la funcin esNetscape(). El resultado de la ventana que indica el tipo de navegador puede apreciarse en las figuras 1 y 2.
Figura 1.
Figura 2.
Con los manejadores onMouseOver y onMouseOut se utiliza la funcin cambia ( ) que permite que la imagen asociada a la liga cambie. La funcionalidad de la liga se muestra en la figura 3.
65
Figura 3.
En resumen, una biblioteca permite al programador coleccionar las distintas funciones que ha generado a fin de reutilizarlas en otras pginas. As mismo, esta tcnica permite a los desarrolladores planificar las funciones de uso general. De ser necesario, aun con este esquema, se pueden definir funciones en la pgina. Por ejemplo, se puede requerir escribir algn texto con la funcin write() del objeto document. Lo nico que se tiene que hacer, es agregar otro bloque de cdigo con la etiqueta <SCRIPT>. Un cdigo que cumpla con este sealamiento podra ser el siguiente: <Html> <Head> <Title> Usando la biblioteca de funciones </Title> <Script Language="JavaScript" src="bibliotecafunciones.js" ></script> </Head> <Body onLoad="if ( esNetscape ( ) ) { alert('estas usando Netscape') } else { alert('No estas usando Netscape') }" > <h1>Biblioteca de funciones</h1> <Hr> <A Href=http://www.unam.mx/ onMouseOver="cambia( boton, 'Imgs/bt2.gif' )" onmouseout="cambia( boton, 'Imgs/bt1.gif' )" ><IMG SRC="Imgs/bt1.gif" width="100" height="40" border=0 alt="" name="boton" ></A> <Hr> <Script Language="JavaScript"> <!-document.write ( 'Texto generado con JavaScript' ); //--> </Script> </Body> </Html> El resultado se presenta en la figura 4.
66
Figura 4.
En este caso al activar el botn Oprime el botn se presenta una ventana con el mensaje de Hola. La figura 5 muestra el efecto de este cdigo.
CGI Common Gateway Interface, un esquema de programacin destinado al procesamiento de los datos obtenidos desde un formulario. Se ejecutan en el servidor de Web.
67
Figura 5.
El cdigo anterior, a diferencia de los formularios desarrollados tradicionalmente con HTML, no especifica las clusulas ACTION ni METHOD e incluso, no se presenta botn tipo submit alguno. La utilidad de la programacin con JavaScript radica en la capacidad de la validacin de datos, que en caso de no cumplirse, no enva la informacin al servidor para su procesamiento.
68
Figura 6.
Con un cdigo bsico de HTML, se dar inicio a la solucin del problema. Dicho cdigo ser el siguiente: <Html> <Head> <Title>Animacion</Title> </Head> <Body bgcolor=#ffffff > <img src="0.gif" name="animacion"> </Body> </Html> Con la etiqueta IMG lo nico que se presenta en un navegador es la primera imagen de la secuencia. La solucin que se presenta consta de los siguientes elementos: - imgenes: el arreglo de imgenes de la animacin. - cuadro: el ndice de la imagen que se debe presentar en un momento dado. - anima(): la funcin que ajusta el valor de la variable anterior, para despus presentar la imagen correspondiente. Esta funcin es la que se ejecuta cada cierto intervalo de tiempo. Como primer paso se cargarn todas las imgenes de la animacin, esto consiste en crear el arreglo para posteriormente cargar cada una de ellas. El cdigo correspondiente es el siguiente: var imagenes = new Array(10); //Se crea el arreglo for (var i = 0; i < 10; i++) { imagenes[i] = new Image(); //Se crea un objeto Image imagenes[i].src = i + ".gif"; //Se asocial al archivo } La sentencia for se utiliza para que en cada iteracin se defina una imagen y se asocie al archivo correspondiente.
69
Una vez cargadas todas las imgenes, lo que procede, es definir la funcin de animacin de la siguiente forma: function anima() { cuadro = (cuadro + 1) % 10 document.animacion.src = imagenes[cuadro].src tiempo = setTimeout("anima()", 250) //Despliega el siguiente cuadro } Las tres lneas del mtodo realizan las siguientes acciones: 1. Cambia el valor de cuadro al siguiente entero, por el uso del operador % (mdulo), el rango de valores va desde 0 a 9. 2. Cambia la imagen de la pgina HTML con el correspondiente valor del arreglo. 3. Se indica que en 250 milisegundos se volver a ejecutar esta funcin. Con este truco se logra un ciclo infinito, desde que se llama a la funcin por primera vez. Si se desea que la animacin inicie cuando la pgina se carga, el siguiente cdigo slo llama a ejecucin a la funcin anima() y deber ir al final de la pgina, precediendo a la etiqueta </BODY>. <Script Language="JavaScript"> <!-anima() //--> </Script> </Body> </Html> El cdigo completo se presenta en el siguiente listado. <Html> <Head> <Title>Animacion</Title> <Script Language="JavaScript"> <!-var imagenes = new Array(10); for (var i = 0; i < 10; i++) { imagenes[i] = new Image(); //Se crea un objeto image imagenes[i].src = i + ".gif"; //Se asocial al archivo } function anima() { document.animacion.src = imagenes[cuadro].src; cuadro = (cuadro + 1) % 10; tiempo = setTimeout("anima()", 250); //Despliega el siguiente cuadro } cuadro = 0; tiempo = null; //-->
70
</Script> </Head> <Body bgcolor=#ffffff > <IMG SRC="0.gif" name="animacion"> <Script Language="JavaScript"> <!-anima() //--> </Script> </Body> </Html> La figura 7 muestra el cambio de las imgenes para lograr la animacin.
Figura 7.
Si se requiere parar la animacin cuando se est ejecutando, se utiliza una segunda funcin: clearTimeout(), cuya sintaxis se presenta a continuacin: clearTimeout( <identificador> ) donde, identificador, es el valor de control que regresa la funcin setTimeout(). Como se defini al principio, la variable tiempo se le asigna el valor de control en cada intervalo de tiempo. Se van a agregar dos botones para iniciar o concluir la animacin, segn el usuario despliegue la pgina. El cdigo HTML correspondiente es el siguiente: <form> <input type=button value="Iniciar" > <input type=button value="Detener" > </form> La figura 8 presenta el ajuste que origina este cdigo.
71
Figura 8.
Para detener dicha animacin, se requiere utilizar el botn Detener por lo que el manejador de eventos que se necesita es el onClick del mismo. Al activarse el botn se ejecutan dos acciones: 1) si la variable tiempo no tiene el valor de null se usa la funcin clearTimeout(); 2) se asigna el valor de null a la variable tiempo. El cdigo para el manejador onClick ser el siguiente: onClick="if (tiempo != null) clearTimeout(tiempo);tiempo=null;" Para reiniciar la animacin, el cdigo para el manejador onClick del botn Iniciar ser el siguiente, el cual slo llama a la funcin anima() nuevamente. El cdigo completo se muestra a continuacin: <Html> <Head> <Title>Animacion</Title> <Script Language="JavaScript"> <!-var imagenes = new Array(10); for(var i = 0; i < 10; i++) { imagenes[i] = new Image(); //Se crea un objeto Image imagenes[i].src = i + ".gif"; //Se asocial al archivo } function anima() { document.animacion.src = imagenes[cuadro].src; cuadro = (cuadro + 1) % 10; tiempo = setTimeout("anima()", 250); //Despliega el siguiente cuadro } cuadro = 0; tiempo = null; //-->
72
</Script> </Head> <Body bgcolor=#ffffff > <IMG SRC="0.gif" name="animacion"> <Br> <Form> <input type=button value="Iniciar" onclick="if (tiempo == null) anima()"> <input type=button value="Detener" onclick="if (tiempo != null) cleartimeout(tiempo);tiempo=null;"> </Form> <Script Language="javascript"> <! anima() //--> </Script> </Body> </Html>
Existen varias formas de manipular las cookies. Entre los mtodos ms recurridos se encuentran: desde un programa CGI y usar JavaScript desde un cliente. En JavaScript la cadena que se utiliza para la consulta y manipulacin de cookies es document.cookie. Dicha cadena representa todas las cookies asociadas al documento. Al ser esta una variable de tipo cadena se recomiendan utilizar mtodos tales como substring, charAt, indexOf y lastIndexOf para determinar los valores guardados en la cookie.
73
Como varias cookies pueden estar definidas en una misma cadena, se requiere de un proceso para la recuperacin de las mismas. El primer paso es definir el separador correcto de las cookies para la cadena. El siguiente cdigo muestra la cadena con tres cookies, marcadas como negritas: cliente, edad y pais. cliente=Alex; path=/;expires=Wednesday,09-Nov-02 23:12:40 GMT; edad=20; path=/;expires=Wednesday,09-Nov-02 23:12:40 GMT; pais=mexico;path=/;expires=Wednesday,09-Nov-02 23:12:40 GMT Para simplificar el proceso de recuperacin de cada una de las cookies, la siguiente funcin regresa todas ellas en un arreglo: function parseCookie() { // Separar cada una de las cookies y las pone en un arreglo. var listaCookies = document.cookie.split("; "); // Arreglo para la informacin de cada cookie var arregloCookies = new Array(); for (var i = 0; i < listaCookies.length; i++) { // Separar pares nombre-valor. var nombre = listaCookies [i].split("="); // Decodifica y agrega al arreglo de cookies. arregloCookies [unescape(nombre [0])] = unescape(name[1]);
} return arregloCookies; }
Con esta ltima funcin podemos simplificar la recuperacin de cualquier conjunto de cookies asociadas a un documento. Pero la utilidad de una cookie depende enteramente del objetivo de la pgina y la necesidad de guardar informacin en el servidor. Como ejemplos de uso de cookies, se pueden mencionar los siguientes: nmero de veces que algn usuario ha visitado una pgina, llevar una historia personalizada de los elementos que se llevan en un carrito electrnico, guardar cdigos proporcionados por el sitio de la pgina de donde se bajan, entre muchos otros. A fin de ver su funcionamiento, y en especial su programacin, el siguiente ejercicio que se presenta al lector ser el de contabilizar el nmeros de accesos que un usuario tiene para una pgina. La idea no es la de desarrollar un contador para indicar el nmero de accesos a una pgina, sino ms bien el de ofrecer al usuario el nmero de veces que cada usuario la ha consultado. Por lo anterior, cada usuario deber conservar una variable en la que se contabiliza el nmero de veces que visit una pgina. En otras palabras se requiere de una cookie, que guarde la cifra. El mecanismo que se utilizar para la manipulacin de la cookie correspondiente se desglosa en los siguientes pasos:
74
1. La pgina solicita al navegador la cookie. 2. Si la cookie no existe: 2.1. Se crea la cookie y se le asigna el valor de 1. 2.2. Se indica en el documento que es la primera vez que se visita la pgina. 3. Si la cookie existe: 3.1. Se recupera el valor de las visitas anteriores. 3.2. Se indica en el documento el nmero de veces que se ha visitado la pgina. 3.3. Se incrementa en 1 el valor de la cookie. La figura 9 resume los pasos anteriores.
Figura 9.
El cdigo completo de la pgina con cookies puede apreciarse en el siguiente listado: <Html> <Head> <Title>Contador de cookies</Title> <Script Language="JavaScript"> <!-function parseCookie() { // Separar cada una de las cookies y las pone en un arreglo. var listaCookies = document.cookie.split("; ")
75
// Arreglo para la informacin de cada cookie var arregloCookies = new Array(listaCookies.length) for (var i = 0; i < listaCookies.length; i++) { // Separar pares nombre-valor. var nombre = listaCookies[i].split("=") // Decodifica y agrega al arreglo de cookies. arregloCookies [unescape(nombre [0])] = unescape(nombre[1]) } return arregloCookies
// Este cdigo requiere la funcin parseCookie. function setCookie(visitas) { /* Esta rutina dispone el cookie estableciendo su valor al nmero de visitas y su fecha de caducidad a un ao a partir de ahora.
*/ var expireDate = new Date() var today = new Date() // Establecer una fecha de caducidad en el futuro. expireDate.setdate(365 + expireDate.getDate()) // Guardar el nmero de visitas. document.cookie = "Visitas=" + String(visitas) + "; expires=" + expireDate.toGMTString() + ";" // Guardar la hora y fecha actuales como la ltima visita. document.cookie = "Ultimavisita=" + escape(today.toGMTString()) + "; expires=" + expiredate.toGMTString() + ";"
if ("" == document.cookie) { // Inicializar el cookie. setCookie(1); document.write("<h2>esta es su primera visita a esta " + } else { "pgina.</h2>"); // Analizar el cookie. var cookies = parseCookie();
76
var nuevoValor = parseInt(cookies.Visitas) + 1; alert ( cookies ) /* for ( i = 0; i < cookies.length; i++ ) { //alert ( cookies[i] ); alert ( "hola" ); } */ // Mostrar el mensaje de nueva bienvenida e incrementar // el contador de visitas. document.write("<h2>Bienvenido de nuevo! Nos ha visitado " + nuevoValor + " vez/veces!</h2>"); document.write("<h3>Su ltima visita fue en " + cookies.UltimaVisita + ".</h3>"); // Reemplazar el cookie existente con uno actualizado. setCookie( nuevovalor );
} // -->
77
<Body> <Div > <H1>Barra de desplazamiento lateral</H1> <p> Este es un texto que aparece en una ventana mvil que flota a la izquierda del contenido principal. </p> </Div> <p> este texto aparece a la derecha del elemento mvil. </p> </Body>
Figura 10.
Parecera que una divisin no tiene algn objetivo en un documento de Web. Si se especifica la clusula STYLE de la siguiente forma: <DIV STYLE="oveflow:scroll; float:left; width:120pt; height:120pt"> El efecto es el que se muestra en la figura 11.
Figura 11. 78
Es decir, el programador cuenta con la capacidad de asignar cualidades especiales a esa divisin, o en otra palabra a la capa. Cabe sealar que una capa puede contener a otras capas, por ejemplo, el siguiente cdigo corresponde a una capa que contiene a otra, la figura 12 muestra el efecto de dicho cdigo. <Html> <Head> </Head> <Body> <H1>Ejemplo de div</H1> <Div id="correo_padre" align="right"> <Div id="correo_hijo" style="position:relative; width:auto; height:auto; left:-10px; top:0px; background-color:gray;"> <A href="mailto:alex@marcopolo.dgsca.unam.mx">Escribanme !!!</A> </Div> </Div> </Body> </Html>
Figura 12.
Una forma de aprovechar estas cualidades es la de colocar cada una de las capas en las posiciones que se requieran. Una forma sintctica de lograr la misma funcionalidad, pero que facilita las tareas de programacin es el uso de las etiquetas <STYLE> <STYLE>. Con estas etiquetas se agrupan los distintos estilos que se aplicarn en un documento. El uso de esta ltima etiqueta se presenta en el siguiente cdigo. <Style Type="text/css"> #mozilla {position: absolute; left: 5; top: 5;} </Style>
79
En este caso particular, se define un estilo denominado mozilla, cuyas caractersticas implican posicin absoluta y a la izquierda, as como un tope de 5 pixeles. Las etiquetas <STYLE> deben declararse en la seccin de HEAD del documento HTML. Para asignar dicho estilo a una capa, se especifica con la clusula ID de la etiqueta <DIV>, tal y como se muestra en el siguiente cdigo: <Html> <Head> <Style Type="text/css"> #mozilla {position: absolute; left: 5; top: 5;} </Style> </Head> <Body> <Div id="mozilla"> El da de hoy comenzar con ... </Div> <H1>flotando</H1> <p> Texto normal en el documento html </p> </Body> </Html> La figura 13 muestra el efecto del cdigo anterior en un navegador.
Figura 13.
Estas cualidades pueden aprovecharse para generar efectos que el usuario controle, por ejemplo, dadas las coordenadas de X y Y, una imagen se coloque dinmicamente en ellas. El cdigo propuesto es el que a continuacin se presenta:
80
<Html> <Head> <Title>Moviendo el escudo</Title> <Style Type="text/css"> #area {position: absolute; left: 300; right: 100; top: 70;} </Style> <Script Language="JavaScript"> function move(leftnum, topnum){ document.area.left = leftnum; document.area.top = topnum; } function hideshow(yn){ document.layers.area.visibility=yn; } </Script> </Head> <Body> <Div id="area"> <Center><img src="escudo.gif"><br>Escudo de<br>Talavera de la Reina, Espaa</Center> </Div> <p> Introduzca un nmero para el margen superior del rea identificada por la imagen: </p> <p> <Form Name="form1" action="javascript:move(document.form1.leftnumber.value, document.form1.topnumber.value)" method=post> <pre> <b>left</b> <input type=text name="leftnumber"><br> <b>top</b> <input type=text name="topnumber"><br> </pre> <Input Type="submit" value="Mueve el escudo"> </Form> </p> <Table> <tr> <td> <Form Name="form2" action="javascript:hideshow('hidden')" method=post> <Input Type="submit" value="Oculta"> </Form>
81
</td> <td> <Form Name="form3" Action="javascript:hideshow('visible')" method=post> <Input Type="submit" value="Muestra"> </Form> </td> </Table> </Body> </Html> La figura 14 muestra el efecto logrado con el cdigo anterior.
Figura 14.
El cdigo anterior, tambin muestra el uso del atributo de document.layers.area.visibility para ocultar o mostrar una capa.
Referencias
http://developer.netscape.com/ http://www.javascriptkit.com/javatutors/index.shtml
82
83