Introducción a JavaScript y sus funciones
Introducción a JavaScript y sus funciones
JavaScript
1
Tema 3
ÍNDICE
1. INTRODUCCIÓN .................................................................................................................... 5
[Link] ................................................................................................................................ 5
1.3.1. ETIQUETA SCRIPT .......................................................................................................... 6
1.3.2. COMENTARIOS ................................................................................................................. 6
1.3.3. MÉTODO WRITE ................................................................................................................ 7
2. EL LENGUAJE ....................................................................................................................... 7
[Link]....................................................................................................................... 7
[Link] ........................................................................................................................... 9
[Link] ................................................................................................................................ 9
2.2.1. DECLARACIÓN DE VARIABLES ........................................................................................... 9
[Link] ................................................................................................................................ 9
2.2.2. CONVERSIÓN DE VARIABLES ........................................................................................... 10
[Link] .............................................................................................................................. 10
2.2.3. VARIABLES BOOLEANAS ................................................................................................. 10
2.2.4. VARIABLES NULAS ......................................................................................................... 10
2.2.5. CONVERSIONES ENTRE TIPOS DE DATOS ......................................................................... 11
[Link] WITH............................................................................................................. 12
[Link] CONDICIONALES........................................................................................ 12
2
Tema 3
[Link] ......................................................................................................................... 18
[Link] ............................................................................................................................ 18
[Link] ............................................................................................................................ 27
3. POO ...................................................................................................................................... 29
4. EVENTOS ............................................................................................................................. 30
3
Tema 3
[Link] ............................................................................................................................ 30
[Link] ............................................................................................................................ 30
[Link] ............................................................................................................................ 32
6. FORMULARIOS ................................................................................................................... 37
[Link] ............................................................................................................................ 39
7. COOKIES.............................................................................................................................. 45
4
Tema 3
1. INTRODUCCIÓN
JavaScript no es un lenguaje de programación propiamente dicho, sinó un lenguaje de
scripts. Hay otros lenguajes de script. Uno de los más famosos es VBScript.
Con JavaScript daremos respuesta a eventos de usuario, como entrada de datos por
ejemplo. Para hacer este tipo de verificaciones no es necesario enviar ningún tipo de
información al servidor. Se procesa todo en el lado del cliente, en el navegador web.
Pero también existe JavaScript a nivel del servidor. Sus características son diferentes,
ya que en el cliente, JavaScript interactúa con el navegador y sus propiedades.
En este módulo vamos a tratar JavaScript desde el punto de vista del cliente. Todos los
ejemplos están en la carpeta ejemplos del archivo ZIP del módulo.
JavaScript puede ser bastante extenso. Nosotros pretendemos dar los conocimientos
necesarios para que por un lado se disponga del conocimiento necesario para el desarrollo de
interactividad en páginas web, y por otro lado, facilitar el aprendizaje de los módulos
posteriores de Java, y más en concreto los que utilicen más tarde JavaScript en su contenido.
Hay varias formas de introducir código JavaScript en nuestra página web. Las 2 más
comunes son:
[Link]
<HTML>
<HEAD>
<TITLE>Ejemplo 1</TITLE>
</HEAD>
<BODY>
Este es documento normal de HTML.
<BR>
<SCRIPT LANGUAGE="JavaScript">
[Link]("Hola Mundo.")
5
Tema 3
</SCRIPT>
<BR>
Segunda línea de texto puesta en el propio código HTML.
</BODY>
</HTML>
[Link]
Con esta etiqueta HTML podremos comunicar al navegador que lo que vamos a
escribir es código JavaScript. Como vemos en el ejemplo, tenemos una propiedad llamada
language, y cuyo valor será el nombre del lenguaje usado.
En el último ejemplo podemos ver cómo introducir un código en otro lenguaje de script,
por ejemplo, VBScript:
<SCRIPT LANGUAGE="VBScript">
1.3.2. Comentarios
Hay navegadores que no utilizan códigos JavaScript. Para estos navegadores será
imposible interpretar el contenido de las etiquetas SCRIPT, por lo tanto, la forma para decir a
estos navegadores que no hagan nada con ese código es poniendo dicho código entre los
símbolos de comentarios, como en el ejemplo siguiente:
<SCRIPT LANGUAGE="JavaScript">
<!--
[Link]("Hola Mundo.")
//-->
</SCRIPT>
6
Tema 3
<HTML>
<HEAD>
<TITLE>Ejemplo 1</TITLE>
</HEAD>
<BODY>
Este es documento normal de HTML.
<BR>
<SCRIPT LANGUAGE="JavaScript">
// Comentario de una línea
[Link]("Hola Mundo.")
</HTML>
El objeto document tiene un método, el método write, con el que podrá enviar
órdenes HTML al navegador.
[Link] (expresión);
2. EL LENGUAJE
2.1. OPERADORES
Cambio de signo: -
Incremento: ++ (incrementa en una unidad)
Decremento: -- (decrementa en una unidad)
Multiplicación: *
División: /
7
Tema 3
Y: &&
O: ||
NO: !
Igual a: ==
Distinto a: !=
Mayor que: >
Mayor o igual que: >=
Menor que: <
Menor o igual que: <=
Hay dos valores especiales para las operaciones de comparación, que son los valores
de verdadero y falso, true y false. Así, si se pregunta si A>5 y el valor de A es 8, el resultado
de esa pregunta es true.
Asignación: =
Suma con asignación: +=
Resta con asignación: -=
Multiplicación con asignación: *=
División con asignación: /=
Módulo con asignación: %=
A += 8 es lo mismo que A = A + 8
2.1.4. El operador ? :
8
Tema 3
2.2. VARIABLES
[Link]
<HTML>
<BODY>
<h1>Ejemplo de variables JavaScript</H1>
<HR>
<SCRIPT LANGUAGE="JavaScript">
<!--
texto = "hola";
[Link]("Digamos ", texto," bien fuerte")
// -->
</SCRIPT>
<BR>Fin
</BODY>
</HTML>
[Link]
En el ejemplo puede verse que primero se crea una variable, llamada texto. En este
caso además de crear la variable, le damos un valor. La igualamos al valor “hola”. Se pone
entre comillas dobles porque es una cadena de texto. Si fuera un número no haría falta.
Luego, para usarla, basta con ver en la siguiente línea cómo se ha hecho. Podría
haberse programado de una forma más intuitiva. La línea puede cambiarse por:
El oprador + sirve para sumar números y para unir o concatenar cadenas de texto. Esta
segunda forma de utilizar la variable es más intuitiva que la primera.
Además de texto y de números existe otro tipo de variables, que son los ARRAYS. Un
array es como una lista de variables del mismo tipo, por ejemplo, una lista de variables
numéricas.
En JavaScript las variables se declaran con la palabra clave reservada var. La forma
de uso es la siguiente:
[=valor] significa que lo que está dentro de los corchetes es OPCIONAL. En este
caso quiere decir que podemos establecer la variable a un determinado valor sin más que
poner el signo = y después del valor que deseemos establecer.
[Link]
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
9
Tema 3
var A = 5;
var B = 7;
var C;
C = A + B;
[Link] ("Resultado: " + C);
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
[Link]
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var A = 5;
var B = "7";
var C;
[Link] (A + B);
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
En este caso, el operador + lo que hace no es sumar, sino concatenar (unir) los dos
números. Esto es así, porque el tipo menos restrictivo es la cadena de texto, y lo que hace
internamente es convertir el número 5 en la cadena de texto “5”, dando como resultado 57, en
lugar de 12.
Son aquellas que toman los valores true y false, es decir, verdadero y falso,
respectivamente.
JavaScript dispone de un valor especial, null, que significa que la variable no tiene
valor. Así, si una variable es null es que está vacía. Una variable vacía no ocupa memoria.
A = 34;
A = null; //Vacío la variable A para que no ocupe memoria.
10
Tema 3
Una variable en JavaScript tiene el tipo de datos del dato que contiene. Pero nosotros
podemos forzar a una conversión, si en algún momento nos hace falta.
A = parseFloat("123,34");
B = parseFloat("123,34", 10);
C = [Link]();
A estas alturas ya habrás notado que las cadenas de texto siempre van entre comillas
dobles.
x = [Link](24)
11
Tema 3
Esta sentencia se usa para “ahorrar trabajo” al programador. Sirve para no tener que
escribir continuamente el nombre del objeto al que pertenece una propiedad o método
determinado. Podemos ver cómo se usa con el siguiente ejemplo:
with Math
{
x = sin(20) + 10 * (pow(12,3));
}
La sintaxis es:
with objeto
{
sentencias;
}
Nótese cómo al usar with, las sentencias que están dentro de las llaves de su ámbito
no hacen falta que se refieran al objeto Math.
Se usan las sentencias condicionales para evaluar una expresión y dependiendo del
valor obtenido hacer una serie de acciones u otra.
2.5.1. Sentencia if
if (condición)
{
acciones cuando condición sea verdadero
}
else
{
acciones cuando condición sea falso
}
Observación: Hay que hacer especial incapié en que para comprobar que dos
expresiones son iguales se usa el operador ==.
[Link]
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var A = 5;
if (A<5)
{
[Link]("La variable A es menor que 5.");
}
else
{
[Link]("La variable A es mayor o igual a 5.");
12
Tema 3
}
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
La rama else es una rama opcional, es decir, se puede codificar la sentencia if sin la
necesidad de escribir la parte else.
Observación: Se pueden anidar sentencias if-else. Para ello hay que tener especial
cuidado en el uso de las llaves, que son los signos que van a agrupar las sentencias de cada
rama.
[Link]
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var A = 5;
if (A<5)
{
[Link]("La variable A es menor que 5.");
}
else
{
if (A==5)
{
[Link]("La variable A es igual a 5.");
}
else
{
[Link]("La variable A es mayor que 5.");
}
}
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
switch (expresión)
{
case valor1:
sentencias1;
break;
13
Tema 3
case valor2:
sentencias1;
break;
case valor_n:
sentencias_n;
break;
default:
sentencias_en_otro_caso;
}
Hay que hacer un especial incapié al uso de la sentencia break, que hace que una vez
que he pasado por uno de los bloques case, no continúe la evaluación de más casos. En caso
de no poner una sentencia break, se continuaría con la evaluación del siguiente case.
[Link]
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var A = 5;
if (A>=0)
{
switch (A)
{
case 1:
[Link]("A es igual a 1.");
break;
case 2:
[Link]("A es igual a 2.");
break;
case 3:
[Link]("A es igual a 3.");
break;
case 4:
[Link]("A es igual a 4.");
break;
case 5:
[Link]("A es igual a 5.");
break;
default:
[Link]("A es mayor a 5.");
}
}
14
Tema 3
else
{
[Link]("A es menor que 0.");
}
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
Para ilustrar este buble vamos a hacer un SCRIPT que sume los 100 primeros números
y muestre su resultado en la página web:
[Link]
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var suma=0;
var i;
for (i=1;i<=100;i++)
{
suma = suma + i;
}
[Link]("La suma es: " + suma);
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
Observaciones: Al igual que con las sentencias if, los bucles pueden anidarse entre
sí. Tened cuidado con el uso de las llaves que son las que definen los cuerpos del bucle.
15
Tema 3
Hay veces en que no sabemos o no nos interesa calcular el número de vueltas que
debe de dar un bucle. Para esas ocasiones se ha desarrollado el bucle while. Tiene dos
formas de ser utilizado. Pasemos a ver la sintáxis de ambas:
Forma 1 Forma 2
while (condición) do
{ {
sentencias; sentencias;
} } while (condición);
[Link]
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var suma=0;
var i=1;
while (i<=100)
{
suma = suma + i;
i++;
}
[Link]("La suma es: " + suma);
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
Como ejemplo vamos a hacer un SCRIPT en que el usuario trate de adivinar una clave
numérica, definido en el código del propio SCRIPT.
16
Tema 3
La sentencia prompt se usa para pedir datos al usuario por el teclado, y se guardan en
una variable.
[Link]
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var numero;
var clave = 5;
do
{
numero = prompt("Introduzca la clave de acceso:","");
if (numero == clave)
{
alert("Acceso permitido");
break;
}
} while(true);
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
El segundo parámetro del prompt, el que hemos puesto al valor “” es el valor inicial
que sale en la caja de introducción de datos. Como lo hemos dejado vacío, no sale nada.
17
Tema 3
En este ejemplo hemos utilizado un bucle del tipo do-while para que el grupo de
sentencias se ejecute al menos una vez. Al poner como condición de terminación
while(true) le estamos diciendo que se ejecute de forma indefinida. Por eso tenemos que
salir del bucle mediante la sentencia break.
EJERCICIO 1
2.7. FUNCIONES
En programación muchas veces tenemos que repetir cierto código, a veces de forma
exacta, y a veces de forma parametrizada, es decir, que tenga valores diferentes, pero que
realice las mismas instrucciones.
Las funciones son las herramientas que tenemos para no tener que escribir el código
varias veces. Para ello, JavaScript tiene una palabra especial. La palabra function. La
sintáxis de la definición de una función es:
function Mensaje()
{
alert("Hola mundo. ");
}
Para ejecutar una función hay que llamarla. Para ello, en alguna parte del código
JavaScript, sólo hay que poner su nombre, y si tuviera parámetros, los parámetros que lleve.
Veamos un ejemplo:
[Link]
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
function Permiso_OK()
{
alert("Acceso permitido");
}
var numero;
var clave = 5;
do
{
numero = prompt("Introduzca la clave de acceso:","");
if (numero == clave)
18
Tema 3
{
Permiso_OK();
break;
}
} while(true);
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
A veces las funciones tienen que devolver un valor. Esto se hace mediante la sentencia
return. A continuación vemos una porción de código de cómo una función devuelve un valor y
como se usa dicha función:
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
function Cuadrado(x)
{
return x * x;
}
function MostrarCuadrado()
{
alert("El cuadrado de 2 es: " + Cuadrado(2));
// -->
</SCRIPT>
</BODY>
</HTML>
Además de introducir los SCIPTS como en los ejemplos que hemos estado viendo
hasta este momento, hay otra forma, que es en la cabecera del documento HTML, de forma
idéntica como hasta ahora, con la salvedad de que esta es la forma habitual.
La etiqueta SCRIPT soporta otra que se usa cuando el navegador no interpreta JavaScript. Es
la etiqueta NOSCRIPT, y se usa como se ve a continuación:
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
…
// -->
</SCRIPT>
<NOSCRIPT>
Su navegador no admite lenguajes de SCRIPT. Actualícelo.
</NOSCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
19
Tema 3
Los SCRIPTS también se pueden almacenar en archivos externos, con extensión .js
de la siguiente forma:
<!--
…
// -->
Una matriz es un conjunto de elementos del mismo tipo colocados de forma ordenada
de forma que nos podremos referir a ellos con un nombre común y un índice de lugar.
Las matrices pueden ser de una dimensión, o de más dimensiones. Cuando son de una
dimensión se llaman Arrays. En JavaScript las matrices son todas de UNA dimensión. Veremos
en los módulos de Java matrices de varias dimensiones.
Las matrices pueden clasificarse del siguiente modo, dependiendo del número de
elementos que puedan almacenar:
20
Tema 3
Una vez esté definida la matriz, para acceder a sus elementos, lo haremos del
siguiente modo:
matriz[indice] = valor;
Los índices de las matrices siempre empiezan en cero. Es decir, en una matriz de 8
elementos, los índices van del 0 al 7.
provincias[0] = "Madrid";
provincias [1] = "Valencia";
provincias [2] = "Cuenca";
provincias [3] = "Asturias";
provincias [4] = "Lugo";
provincias [5] = "Cáceres";
provincias [6] = "Alicante";
provincias [7] = "Málaga";
En el siguiente ejemplo creamos una matriz con los meses del año y los mostramos en
la página web.
[Link]
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function Matrices()
{
var meses = new Array(12);
var i;
meses[0] = "Enero";
meses[1] = "Febrero";
meses[2] = "Marzo";
meses[3] = "Abril";
meses[4] = "Mayo";
meses[5] = "Junio";
meses[6] = "Julio";
meses[7] = "Agosto";
meses[8] = "Septiembre";
meses[9] = "Octubre";
meses[10] = "Noviembre";
meses[11] = "Diciembre";
21
Tema 3
for (i=0;i<=11;i++)
{
[Link](i+1 + ": " + meses[i] + "<BR>");
}
}
// -->
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
Matrices();
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
La sentencia siguiente
tiene un comportamiento especial. Nos podemos dar cuenta en la salida del ejemplo
que la parte que puedes ver en amarillo es una suma y no una concatenación. El primer signo
+ suma el valor a i al número 1, y el segundo signo + une o concatena dos cadenas de texto.
Como ya hemos hablado de esto anteriormente, esto ocurre porque el operador + está
sobrecargado, y dependiendo del valor de sus operandos realiza una operación u otra,
teniendo mayor preferencia, en este caso, la operación aritmética de la suma.
Es importante que cada vez que codifiquemos este tipo de sentencias nos sentemos
tranquilamente a pensar cual será el resultado final, y si tenemos alguna duda, lo mejor será
hacer una línea más, y convertir la sentencia anterior en las siguientes:
j = i + 1;
[Link](j + ": " + meses[i] + "<BR>");
Vamos a ver otro ejemplo. En el siguiente código el sistema pide al usuario los 9
números de su número de teléfono y los guarda en una matriz para posteriormente mostrarlos
en pantalla. Además, en este ejemplo, vamos a introducir el uso de la función isNaN. Esta
función devuelve true si la variable que se le ha pasado como parámetro no es un número, es
decir, que es un NaN (not a number). Devuelve false si es un número.
[Link]
<HTML>
22
Tema 3
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function Telefono()
{
var numero = new Array(9);
var i,j;
var digito = "";
for (i=0;i<=8;i++)
{
do {
j = i + 1;
digito = prompt("Introduce el dígito " + j + " de tu
número de teléfono:","");
} while ((isNaN(digito)==true) || (digito==null));
numero[i] = digito;
}
for (i=0;i<=8;i++)
{
[Link](numero[i] + " ");
}
}
// -->
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
Telefono();
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
do {
j = i + 1;
digito = prompt("Introduce el dígito " + j + " de tu número de teléfono:","");
} while ((isNaN(digito)==true) || (digito==null));
Hemos puesto este trozo de código en un tipo de letra más pequeño para que pueda
verse línea a línea fácilmente. La condicición del bucle pregunta por dos valores. Primero
pregunta si el número que acabamos de introducir es un número, y mediante la segunda
condición pregunta si hemos pulsado la tecla CANCELAR de la caja de diálogo prompt.
23
Tema 3
Entonces, mediante esta condición estamos diciendo que si es algo que no sea un número o
(||) si se ha pulsado cancelar, siga preguntando por el dígito número i.
((isNaN(digito)==true) || (digito==null));
A la hora de la definición de las matrices, hay otra forma, que es la tercera de la que
hablábamos al principio del capítulo. Es la siguiente:
Se trata de inicializar la matriz a la vez que se crea la variable. En este ejemplo hemos
creado un array de 7 elementos (del 0 al 6), con la palabra SYNCROM.
EJERCICIO 2
Crea un SCRIPT que represente el juego del ahorcado. Define en un array una palabra,
en cada casilla del array una letra, y que luego el usuario intente adivinar la palabra introducida.
Pon un limite de 5 a los fallos permitidos.
Esta práctica, más adelante, será más sencilla de hacer con otros elementos que
estudiaremos, pero es una buena manera de ir ensayando sobre todo lo visto hasta el
momento.
JavaScript nos provee a través del objeto String un conjunto de funciones que van a
permitir al programador multitud de operaciones con las cadenas de texto.
Algunas de las características de las cadenas de texto son que deben de ir entre
comillas dobles o simples y que se unen o concatenan mediante el operador +.
En cuanto a las comparaciones entre cadenas de texto, igual que pueden compararse
variables que contengan números para ver, por ejemplo, cuando una es mayor que la otra, las
cadenas de texto también pueden ser comparadas.
Para ello, cada carácter tiene asociado un número interno. Este número es el llamada
código ASCII. Por ejemplo, el carácter “A” tiene asociado el número 65, y la “a” el 97.
La “B” tiene el código 66, por lo tanto “A” será menor que “B”.
24
Tema 3
[Link]
carácter = [Link](índice);
caracter = "Syncrom".charAt(3);
Esta sentencia devuelve en la variable caracter el valor ”c”, que es el que ocupa la
posición 3. Los índices, al igual que en las matrices, comienzan en 0. Por tanto la cadena
Syncrom sería somo sigue:
S y n c r o m
índices 0 1 2 3 4 5 6
[Link]
longitud = "Syncrom".length;
[Link]
Utilizaremos indexOf para saber si una cadena está contenida en otra, y si es así, nos
devuelve la posición en la cadena de búsqueda donde se inicia la contención.
posicion = "Syncrom".indexOf("cr");
posicion = "Syncrom".indexOf("cr",2);
25
Tema 3
[Link]
Un ejemplo sería:
[Link]
[Link]
Es otra función más para obtener una subcadena a partir de otra. Funciona
exactamente igual a slice pero el segundo parámetro es obligatorio. Esta función, junto con
substr, es muy usada.
[Link]()
[Link]()
26
Tema 3
Estas dos funciones son de uso frecuente en las comparaciones entre cadenas, ya que
normalmente no nos interesarán las diferencias entre mayúsculas o minúsculas.
EJERCICIO 3
Con todas estas funciones de trabajo de cadenas, ahora será mucho más sencillo crear
un SCRIPT para modelizar el juego del ahorcado que antes te hemos propuesto como Ejercicio
2.
Para trabajar con fechas y horas hay que trabajar con el objeto Date. Para conocer la
fecha y hora actual, basta con la siguiente línea:
Una vez que tenemos una variable de tipo Date, podemos usar sus métodos o
funciones para acceder a su componentes:
[Link]
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function VerFecha()
{
var fecha=new Date();
var diames=[Link]();
27
Tema 3
var diasemana=[Link]();
var mes=[Link]() + 1 ;
var anio=[Link]();
[Link]("<FONT FACE='Arial'>")
[Link](semana[diasemana] + ", " + diames + " de "
+ meses[mes] + " de " + anio);
[Link]("</FONT>")
}
// -->
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
VerFecha();
// -->
</SCRIPT>
</BODY>
</HTML>
[Link]
Todo el código es fácil de comprender. Pero nos vamos a parar en las siguientes
sentencias, que hemos puesto en un tipo de letra inferior para que quepan en un línea:
[Link]("<FONT FACE='Arial'>")
…
[Link]("</FONT>")
Nos damos cuenta de que hemos enviado código HTML por medio de
[Link] a la página. Y hemos entrecomillado con comillas dobles todo el parámetro,
28
Tema 3
y si necesitamos comillas en alguna parte de la cadena enviada, se usan las simples. Así es
como se envía código HTML mediante [Link].
3. POO
Como ya sabemos, la Programación Orientada a Objetos, o POO, trata de vincular el
mundo real con el mundo del software. Se intenta modelizar el mundo real de una forma
cercana al propio mundo real.
Como se puede ver, hemos ido incluyendo los objetos en nuestros pequeños códigos, y
lo hemos hecho de una forma natural. Porque la POO, lejos de ser compleja, es una
modelización natural del mundo.
En nuestro mundo, casi todo está compuesto de partes. Por ejemplo, un coche es un
conjunto de piezas unidas en determinada forma.
Lo que hace new realmente es invocar a una función especial que tienen todos los
objetos y que se llama constructor. El constructor toma una serie de parámetros y crea una
variable del tipo el objeto al que hace referencia con los parámetros que se le han pasado.
Sin embargo, si es motivo de este manual el saber usar los objetos que vamos
explicando, y sobre todo, el comenzar a dar unas nociones que luego, en Java, serán de
mucha utilidad.
Para acceder a los métodos y propiedades que tienen los objetos se hace mediante la
nomenclatura “punto”.
[Link]
Objeto.método
[Link]("</FONT>")
29
Tema 3
En este punto, tenemos que hablar de la palabra clave reservada null. Cuando
igualamos una variable al valor null la estamos dejando vacía. De esta forma vamos a liberar
la memoria que ocupa ese objeto.
4. EVENTOS
Los eventos es donde se van a desencadenar las acciones que interaccionan con el
usuario.
Vamos a poner un ejemplo. Imagina una página con un formulario que debes rellenar
para asociarte a un determinado servicio. Ese formulario tiene un botón que sirve para enviar
tus datos y proceder al registro de tu cuenta. Al hacer clic sobre el botón se desencadena el
evento onClick.
Todos los eventos de JavaScript comienzan por las letras on. Así, tenemos, por
ejemplo, el evento onClick, onBlur, onFocus, etc..
Esta línea define un botón con el título Enviar en el que se ha definido que al ser
pulsado se ejecute la función Validar(), que estará definida en un SCRIPT.
[Link]
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function Mensaje()
{
alert("Hola Mundo.");
}
</SCRIPT>
</HEAD>
<BODY>
Este es documento normal de HTML.
<BR>
<INPUT TYPE="button" VALUE="Saludar" onClick="Mensaje()">
<BR>
Segunda línea de texto puesta en el propio código HTML.
</BODY>
</HTML>
[Link]
30
Tema 3
onClick
Vamos a ver ahora una lista de los eventos disponibles en los diferentes objetos:
Objeto Eventos
onLoad
onUnload
window
onBlur
onFocus
onClick
onMouseOut
link
onMouseOver
onAbort
image onError
onLoad
onReset
form onSubmit
onBlur
onChange
text, textarea, password
onFocus
onSelect
onClick
onBlur
button, reset, submit, radio, checkbox, select
onChange
onFocus
onLoad: Al cargar.
onUnload: Al descargar.
onBlur, onFocus: Al recibir el foco.
onClick: Al hacer clic. Al pulsar.
31
Tema 3
Vamos a programar un ejemplo un poco más elaborado, que incorpore algunas de las
características que hemos ido viendo hasta este momento. Además, este ejemplo nos servirá
para la introducción de la función setTimeout, que toma dos parámetros. El primero es la
función que se va a ejecutar, y el segundo es el número de milisegundos pasados los cuales se
ejecutará el código indicado en el primer parámetro.
function Ejemplo
Código
setTimeout("Ejemplo()",1000);
Mediante esta función podremos crear una estructura con un bucle cuyo resultado sea
que parezca que hay un movimiento en nuestra página web. Vamos a ver el código:
[Link]
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function Mover()
{
var s = [Link];
var longitud = [Link];
var i, resultado;
[Link]=resultado;
setTimeout("Mover()",100);
}
</SCRIPT>
</HEAD>
32
Tema 3
<BODY>
</BODY>
</HTML>
[Link]
La caja de texto tiene una propiedad llamada value que referencia al contenido de la
caja.
window
- history
- location
- frames
• document
- anchors
- applets
- embeds
- images
- links
- Forms
- Elements
33
Tema 3
Para abrir ventanas se utiliza el método open, como acabamos de ver. Vamos a
estudiar este método especial. Su sintáxis es:
URL contiene la página que se va a abrir. Si se deja vacío (“”), se abrirá una página en
blanco, que podremos controlar mediante la Variable_ventana y las órdenes a través de
[Link] aplicadas a dicha Variable_ventana.
target hace referencia al sitio donde va a abrirse la ventana. Puede tomar los valores
del parámetro TARGET de la etiqueta A de HTML, o puede ser el nombre de una ventana ya
definida antes, en cuyo caso se abrirá en el espacio que ocupe dicha ventana.
Navegador
(0,0)
top
(top, left)
left
Ventana height
width
34
Tema 3
Vamos a ver un ejemplo en el que se abre con un botón una ventana vacía en la que
se pone un mensaje, y luego se cierra con otro botón.
[Link]
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
var ventana;
function Abrir()
{
ventana = [Link]("","_blank","directories=no,
scroll=no, menubar=no, width=200, height=100");
[Link]("<H1>");
[Link]("Bienvenido a mi ventana");
[Link]("</H1>");
}
function Cerrar()
{
[Link]();
}
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
[Link]
Nótese que para que la variable ventana esté accesible desde todo el SCRIPT se
define fuera de las funciones, a nivel del propio SCRIPT.
Este objeto contiene toda la información acerca de la localización de la página web que
se está mostrando.
[Link] = "[Link]
35
Tema 3
Permite obtener información acerca del navegador que se está utilizando para la
visualización de la página. Es interesante a la hora de hacer una programación específica para
un determinado navegador. Aunque desde este curso nosotros siempre os aconsejamos hacer
una programación estándar para todos los navegadores y no usar características propias de
cada uno de ellos, a no ser, claro, que sepáis que todos vuestros visitantes usarán un
determinado navegador, como es el caso de una Intranet, por ejemplo.
Representa el propio documento. Ya hemos visto algo de este objeto con la ya famosa
sentencia [Link].
36
Tema 3
Como método destacado tenemos al método write, del que ya hemos tratado en este
capítulo
Este objeto también dispone de una serie de matrices definidas en él. Pero sólo nos
vamos a ocupar de 2 de ellas. La matriz de imágenes (images), que contiene todas las
imágenes IMG de un documento HTML, y la matriz de formularios (forms) que contiene todos
los objetos FORM del documento.
Como estas propiedades son matrices, tienen todas las propiedades y métodos de las
matrices que ya hemos estudiado.
s = [Link][4].src;
6. FORMULARIOS
Ya hemos visto en el tema de HTML todas las etiquetas necesarias para la creación de
formularios. Recordemos, por encima, la etiqueta FORM:
</FORM>
La forma de trabajar con JavaScript con los formularios es muy sencilla. Pongamos un
ejemplo de un formulario que tenga una caja de texto, según el código siguiente:
37
Tema 3
Si recuerdas las propiedades de las cajas de texto, teníamos una que hacía referencia
al contenido, que es value.
Bueno, pues para acceder al contenido de la caja de texto mediante un SCRIPT sólo
tendremos que utilizarla como sigue:
s = [Link]
Así se hace con todas las propiedades que hemos visto en el módulo de HTML.
Para ilustrar todo lo que hemos ido viendo a lo largo de este manual, vamos desarrollar
el ejemplo del ahorcado.
Los aspectos que todavía no hemos visto, porque hacen referencia a DHTML, el
próximo tema, son:
38
Tema 3
Visibilidad de los botones: Al pulsar una de las letras, para saber que ya ha sido
usada la ponemos invisible. Esto es parte de DHTML.
Para ocultar la letra utilizamos además de DHTML un bucle especial que vamos a
analizar a la hora de analizar el código. Es un bucle para recorrer los objetos de un
formulario que nos permitirá recorrer los botones para saber cuál de ellos ha
pulsado el usuario.
Quitando estos 3 aspectos, deberías ser capaz de realizar el ejercicio, aunque hay que
decir que este ejercicio-práctica tiene la dificultad añadida de unir varios de los aspectos de
JavaScript que hemos visto hasta ahora.
[Link]
<HTML>
<HEAD>
<TITLE>Juego del Ahorcado</TITLE>
Hojas de estilo:
<STYLE TYPE="text/css"> Se verá en el
INPUT {width:20pt;} tema de DHTML.
.boton2 {width:80pt;}
.texto {width:150pt; text-align:center;}
</STYLE>
<SCRIPT LANGUAGE="JavaScript">
var palabra; Variables a nivel de SCRIPT para que
var num_intentos = 6; puedan ser usadas en todas las
var sugerida = new Array(); funciones.
function Comenzar()
{ Explicada al final del código
var i;
var longitud;
BotonesVisibles();
num_intentos = 6;
palabra = "";
do
{
palabra = prompt("Introduzca una palabra para adivinar","");
}
while((palabra=="")||(palabra==null));
palabra = [Link]();
[Link] = num_intentos;
39
Tema 3
longitud = [Link];
for(i=0;i<=longitud-1;i++)
{
sugerida[i] = " - ";
}
EscribirPalabra();
}
function EscribirPalabra()
{ Escribe en la cada de texto
var i; adivinar el array sugerida.
var longitud = [Link];
[Link] = "";
for(i=0;i<=longitud-1;i++)
{
[Link] = [Link] + sugerida[i];
}
}
function EsCorrecta()
{ Verifica si hay algún guión en el array
sugerida. Si no hay ninguno es que
var i;
se ha adivinado ya todas las letras.
var longitud = [Link];
var PalabraOK; En este tipo de bucles, en los que a la
salida tenemos que tener una
PalabraOK = true; respuesta en verdadero o falso a una
for(i=0;i<=longitud-1;i++) pregunta (en este caso si todas las
casillas del array son guiones), se
{ hacen del mismo modo. Suponemos
if(sugerida[i] ==" - ") un valor, en este caso
{ PalabraOK=true, y buscamos
PalabraOK = false; dentro del bucle el que ese valor
cambie (a false, en nuestro ejemplo).
}
Pero NUNCA se evalúan las dos
} posibilidades. Se supone una. Si no
hay cambios, la suposición es
return PalabraOK; correcta, y si hay cambios es que la
} suposición era falsa.
function Probar(letra)
{
var i;
var longitud = [Link];
var bAcertar;
[Link] = "";
Comprobamos si la letra
que nos llega en el
bAcertar = false; parámetro está en alguna
for(i=0;i<=longitud-1;i++) de las posiciones de la
{ palabra.
if([Link](i)==letra)
{
sugerida[i] = " " + letra + " ";
En caso de que se acierte
bAcertar = true; una letra, también se pone
} en la posición
} correspondiente en el array
sugerida.
EscribirPalabra();
40
Tema 3
if (EsCorrecta()==true)
{
alert("Has ganado.");
}
if (bAcertar==false)
{
Fallar();
Hojas de estilo: Se pone a invisible
} (hidden) el botón de la letra que se
ha pulsado. Se verán estos
aspectos en DHTML.
for (i=0; i<[Link]; i++)
{ Al final del código está el análisis de
este bucle.
if ([Link][i].name==letra)
{
[Link][i].[Link] = "hidden";
}
}
}
function BotonesVisibles()
Este bucle hace lo
{
contrario al anterior.
for (i=0; i<[Link]; i++) Es decir, pone a
{ visibles todos los
[Link][i].[Link] = "visible"; botones del
} formulario.
}
</SCRIPT>
41
Tema 3
</HEAD>
<BODY>
42
Tema 3
<td>
<input name="M" type="button" id="M" value="M" onClick="Probar('M')">
</td>
<td>
<input name="N" type="button" id="N" value="N" onClick="Probar('N')">
</td>
<td>
<input name="Ñ" type="button" id="Ñ" value="Ñ"
onClick="Probar('Ñ')">
</td>
<td> </td>
</tr>
<tr>
<td>
<input name="O" type="button" id="O" value="O" onClick="Probar('O')">
</td>
<td>
<input name="P" type="button" id="P" value="P" onClick="Probar('P')">
</td>
<td>
<input name="Q" type="button" id="Q" value="Q" onClick="Probar('Q')">
</td>
<td> </td>
</tr>
<tr>
<td>
<input name="R" type="button" id="R" value="R" onClick="Probar('R')">
</td>
<td>
<input name="S" type="button" id="S" value="S" onClick="Probar('S')">
</td>
<td>
<input name="T" type="button" id="T" value="T" onClick="Probar('T')">
</td>
<td> </td>
</tr>
<tr>
<td>
<input name="U" type="button" id="U" value="U" onClick="Probar('U')">
</td>
<td>
<input name="V" type="button" id="V" value="V" onClick="Probar('V')">
</td>
<td>
<input name="W" type="button" id="W" value="W" onClick="Probar('W')">
</td>
<td> </td>
</tr>
<tr>
<td>
<input name="X" type="button" id="X" value="X" onClick="Probar('X')">
</td>
<td>
<input name="Y" type="button" id="Y" value="Y" onClick="Probar('Y')">
</td>
<td>
<input name="Z" type="button" id="Z" value="Z" onClick="Probar('Z')">
</td>
<td> </td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
43
Tema 3
<td>
<INPUT NAME="adivinar" TYPE="text" ID="adivinar" Class="texto">
</td>
</tr> Hojas de estilo:
</table> Se verá en el
tema de DHTML.
<p>
<font size="2" face="Arial, Helvetica, sans-serif">
Nº de intentos que te quedan:
</font> <input name="intentos" type="text" id="intentos">
</p>
</form>
</BODY>
</HTML>
[Link]
Vamos a por las explicaciones parciales de las 2 porciones de código más especiales:
function Comenzar()
{
var i;
var longitud;
BotonesVisibles();
num_intentos = 6;
palabra = "";
do
{
palabra = prompt("Introduzca una palabra para adivinar","");
}
while((palabra=="")||(palabra==null));
palabra = [Link]();
[Link] = num_intentos;
longitud = [Link];
for(i=0;i<=longitud-1;i++)
{
sugerida[i] = " - ";
}
EscribirPalabra();
}
Lo primero es inicializar las variables que usaremos, así como poner visibles todos los
botones de las letras mediante la función BotonesVisibles().
Mediante el bucle do-while se pide la palabra que luego habrá que adivinar. Lo ideal
sería que el sistema tuviera una lista de palabras grabadas de antemano, pero de momento,
para esta práctica, lo hacemos así.
44
Tema 3
adivinar, pero en lugar de las letras se inicializa a guiones, y cada vez que se acierta una letra
se cambia el guión por la letra correspondiente.
Vamos a analizar ahora el bucle especial del que antes hablábamos, y que se encarga
de recorrer todos los elementos del formulario:
Es muy simple, ¿verdad? Se trata de un bucle for especial. Pero hemos utilizado la
características elements de los formularios, que es un array con los elementos del formulario.
Lo primero es recorrer dicho array desde cero hasta su length. Una vez dentro del
bucle preguntamos qué botón se ha pulsado. Como hemos puesto la propiedad NAME y la
propiedad ID de los botones igual a la letra que indican, sólo tengo que preguntar si el NAME
del elemento actual es igual a la letra que se ha pasado por parámetro a la función. En ese
caso pondré dicho botón a invisible, accediendo a la propiedad style que tiene un atributo,
visibility, que puede tomar dos valores, hidden y visible. Estos valores y esta
propiedad son fundamentales en DHTML.
Repasa ahora el código poco a poco, con todas las explicaciones leídas e intenta
comprender cómo la descomposición de las funciones que hay es natural, de cara a modular
un poco el propio código.
7. COOKIES
Seguramente en más de una ocasión ya has visto el término de cookie navegando por
Internet, en mensajes del tipo “debe de tener las cookies activadas para ver correctamente esta
página”, o similares.
Las cookies es el medio por el que la página web almacena una limitada información
temporal en el ordenador del navegante. Permiten almacenar datos del usuario sin tener que
tener esta información guardada en grandes ficheros en los servidores de la propia página.
Información desde una configuración de colores, por ejemplo, hasta incluso contraseñas,
aunque no es buena idea guardar contraseñas en las cookies.
Las cookies son simples archivos de texto que no contienen código ejecutable, sólo
texto. Un ejemplo típico de una cookie es contar el número de veces que un usuario ha visitado
una página.
45
Tema 3
En esta línea, se podría decir que si alguna página instala una cookie en nuestro
ordenador que lo que haga sea “vigilar” por qué páginas se navega para conocer así los
hábitos de navegación de los usuario y poder crear estadísticas, o incluso, un marketing más
enfocado, y lo hace de una forma ilícita, es decir, sin pedir permiso al usuario de esa
instalación u omitiendo para qué va a ser usada esa información, entonces sí podría decirse
que estamos ante un intento de una actividad que debe de ser detenida, y ahí es donde entran
en juego los sistemas de antivirus y protección de la máquina y de nuestra información.
Pero la propia cookie en si no representa ningún problema, sinó es más bien el uso que
se da de esa información recopilada.
Las cookies se almacenan como una cadena de texto que pertenece a la propiedad
cookie del objeto document.
Nos vamos a crear una función para crear una cookie que sea capaz de establecer
todos sus valores mediante los parámetros que le pasemos. De esta forma será mucho más
sencillo trabajar con las cookies:
Los dos primeros parámetros son los obligatorios. El resto son opcionales. Podríamos
tener así, la siguiente sentencia:
46
Tema 3
function LeerCookie(nombre)
{
var cnombre = nombre + "=";
var dc = [Link];
if ([Link] > 0)
{
inicio = [Link](cnombre);
if (inicio != -1)
{
inicio += [Link];
fin = [Link](";",inicio);
if (fin == -1)
{
fin = [Link];
}
return unescape([Link](inicio, fin));
}
}
return null;
}
Para eliminar una cookie tan sólo hay que poner la fecha de caducidad a una anterior a
la actual:
47
Tema 3
onLoad del formulario y que establezca el valor inicial de la caja de texto al valor de la cookie,
si existe.
Para ver esta funcionalidad, basta con ejecutar la página y establecer un valor para la
cookie. Luego cierra la página y vuelve a abrirla. Verás que la caja de texto tendrá el valor que
tiene almacenada la cookie.
[Link]
<html>
<head>
<script language="javascript">
<!--
function LeerCookie(nombre)
{
var cnombre = nombre + "=";
var dc = [Link];
if ([Link] > 0)
{
inicio = [Link](cnombre);
if (inicio != -1)
{
inicio += [Link];
fin = [Link](";",inicio);
if (fin == -1)
{
fin = [Link];
}
return unescape([Link](inicio, fin));
}
}
return null;
}
function Mostrar()
{
var Visitante = LeerCookie('Visitante2')
if (Visitante != null)
{
[Link] = Visitante;
}
return;
}
48
Tema 3
// -->
</script>
</head>
<body onLoad="Mostrar()">
<h1>Ejemplo de cookies</h1>
<hr>
<form name="formulario" method="get">
Introduce tu nombre:
<input type="text" name="Nombre">
<input type="button" value="Enviar"
onClick="CrearCookie('Visitante2',[Link],caduca,'/')">
<br><br>
<input type="button" value="Leer cookie"
onClick="alert(LeerCookie('Visitante2'))">
</form>
</body>
</html>
[Link]
49
Tema 3
AUTOEVALUACIÓN
A. If (x>2) y=100;
C. If x>2 y=100;
D. if (x>2) y=100;
A. Nada.
50
Tema 3
C. Un virus.
A. Nunca.
C. Siempre.
A. Verdadero.
B. Falso.
A. Verdadero.
B. Falso.
51
Tema 3
Ejercicios Propuestos
1. Programar un SCRIPT que tenga una función que nos indique si una dirección de
correo que se le pase por parámetro tiene el signo @ en ella. Hacerla en un
fichero .js externo.
52