JavaScript Ya
JavaScript Ya
http://www. javascriptya.com.ar/
Programa: Conjunto de instrucciones que entiende un ordenador para realizar una actividad. Todo
programa tiene un objetivo bien definido: un procesador de texto es un programa que permite
cargar, modificar e imprimir textos, un programa de ajedrez permite jugar al ajedrez contra el
ordenador u otro contrincante humano. La actividad fundamental del programador es resolver
problemas empleando el ordenador como herramienta fundamental. Para la resolución de un
problema hay que plantear un algoritmo.
Lenguaje de programación: Conjunto de instrucciones que son interpretadas por una computadora
para realizar operaciones, mostrar datos por pantalla, sacar listados por impresora, entrar datos
por teclado, etc. Nosotros aprenderemos a programar utilizando el lenguaje de programación
JavaScript.
Para desarrollar este curso no requerimos ningún conocimiento de otro lenguaje.
2-Qué es JavaScript?
JavaScript, al igual que Flash, Visual Basic Script, es una de las múltiples maneras que han surgido
para extender las capacidades del lenguaje HTML (lenguaje para el diseño de páginas de Internet).
Al ser la más sencilla, es por el momento la más extendida. JavaScript no es un lenguaje de
programación propiamente dicho como C, C++, Delphi, etc. Es un lenguaje script u orientado a
documento, como pueden ser los lenguajes de macros que tienen muchos procesadores de texto y
planillas de cálculo. No se puede desarrollar un programa con JavaScript que se ejecute fuera de
un Navegador.
JavaScript es un lenguaje interpretado que se embebe en una página web HTML. Un lenguaje
interpretado significa que a las instrucciones las analiza y procesa el navegador en el momento que
deben ser ejecutadas.
Nuestro primer programa será el famoso "Hola Mundo", es decir un programa que muestre en el
documento HTML el mensaje "Hola Mundo".
<html>
<head>
</head>
<body>
<script language="javascript">
document.write('Hola Mundo');
</script>
</body>
</html>
<script language="javascript">
</script>
1
Para imprimir caracteres sobre la página debemos llamar al comando 'write' del objeto document.
La información a imprimirse debe ir entre comillas y encerrada entre paréntesis. Todo lo que
indicamos entre comillas aparecerá tal cual dentro de la página HTML.
Es decir, si pedimos al navegador que ejecute esta página mostrará el texto 'Hola Mundo'.
Cada vez que escribimos una instrucción finalizamos con el caracter punto y coma.
3-Variables.
Una variable es un depósito donde hay un valor. Consta de un nombre y pertenece a un tipo
(númerico, cadena de caracteres, etc.).
Tipos de variable:
Una variable puede almacenar:
Valores Enteros (100, 260, etc.)
Valores Reales (1.24, 2.90, 5.00, etc.)
Cadenas de caracteres ("Juan", "Compras", "Listado", etc.)
Valores lógicos (true,false)
Existen otros tipos de variables que veremos más adelante.
Las variables son nombres que ponemos a los lugares donde almacenamos la información. En
JavaScript, deben comenzar por una letra o un subrayado (_), pudiendo haber además dígitos entre
los demás caracteres. Una variable no puede tener el mismo nombre de una palabra clave del
lenguaje.
Una variable se define anteponiéndole la palabra clave var:
var dia;
var edad=20;
var edad;
edad=20;
<html>
<head>
</head>
<body>
<script language="JavaScript">
var nombre='Juan';
var edad=10;
var altura=1.92;
var casado=false;
document.write(nombre);
document.write('<br>');
document.write(edad);
document.write('<br>');
document.write(altura);
document.write('<br>');
document.write(casado);
</script>
</body>
</html>
Cuando imprimimos una variable, no la debemos disponer entre simples comillas (en caso de hacer
esto, aparecerá el nombre de la variable y no su contenido)
Los valores de las variables que almacenan nombres (es decir, son cadenas de caracteres) deben ir
encerradas entre comillas simples. Los valores de las variables enteras (en este ejemplo la variable
edad) y reales no deben ir encerradas entre comillas. Cada instrucción finaliza con un punto y
coma.
Las variables de tipo boolean pueden almacenar solo dos valores: true o false.
El resultado al visualizar la página debe ser 4 líneas similares a éstas:
Juan
10
1.92
false
Es decir que se muestran los contenidos de las 4 variables. Una variable es de un tipo determinado
cuando le asignamos un valor:
var edad=10;
var nombre='juan';
Es de tipo cadena.
Para mostrar el contenido de una variable en una página debemos utilizar la función 'write' que
pertenece al objeto document. Recordemos que el lenguaje JavaScript es sensible a mayúsculas y
minúsculas y no será lo mismo si tipeamos:
3
Document.Write(nombre);
Esto porque no existe el objeto 'Document' sino el objeto 'document' (con d minúscula), lo mismo
no existe la función 'Write' sino 'write', este es un error muy común cuando comenzamos a
programar en JavaScript.
Para la entrada de datos por teclado tenemos la función prompt. Cada vez que necesitamos
ingresar un dato con esta función, aparece una ventana donde cargamos el valor. Hay otras formas
más sofisticadas para la entrada de datos en una página HTML, pero para el aprendizaje de los
conceptos básicos de JavaScript nos resultará más práctica esta función.
Para ver su funcionamiento analicemos este ejemplo:
<html>
<head>
</head>
<body>
<script language="JavaScript">
var nombre;
var edad;
nombre=prompt('Ingrese su nombre:','');
edad=prompt('Ingrese su edad:','');
document.write('Hola ');
document.write(nombre);
document.write(' asi que tienes ');
document.write(edad);
document.write(' años');
</script>
</body>
</html>
La función prompt tiene dos parámetros: uno es el mensaje y el otro el valor incial a mostrar.
<html>
<head>
<script language="JavaScript">
var valor1;
var valor2;
valor1=prompt('Ingrese primer número:','');
valor2=prompt('Ingrese segundo número','');
var suma=parseInt(valor1)+parseInt(valor2);
var producto=valor1*valor2;
4
document.write('La suma es ');
document.write(suma);
document.write('<br>');
document.write('El producto es ');
document.write(producto);
</script>
</head>
<body>
</body>
</html>
Lo primero que debemos tener en cuenta es que si queremos que el operador + sume los contenidos
de los valores numéricos ingresados por teclado, debemos llamar a la función parseInt y pasarle
como parámetro las variables valor1 y valor2 sucesivamente. Con esto logramos que el operador
más, sume las variables como enteros y no como cadenas de caracteres. Si por ejemplo sumamos 1
+ 1 sin utilizar la función parseInt el resultado será 11 en lugar de 2, ya que el operador +
concatena las dos cadenas.
Cuando empleamos el operador * para el producto, ya no es obligatorio utilizar la función parseInt
(es decir, sólo para el operador + debemos utilizarla).
En JavaScript, como no podemos indicarle de qué tipo es la variable, requiere mucho más cuidado
cuando operamos con sus contenidos.
Este problema es secuencial ya que ingresamos dos valores por teclado, luego hacemos dos
operaciones y por último mostramos los resultados.
No todos los problemas pueden resolverse empleando estructuras secuenciales. Cuando hay que
tomar una decisión aparecen las estructuras condicionales.
<html>
<head>
</head>
<body>
<script language="javascript">
var nombre;
var nota;
nombre=prompt('Ingrese nombre:','');
5
nota=prompt('Ingrese su nota:','');
if (nota>=4)
{
document.write(nombre+' esta aprobado con un '+nota);
}
</script>
</body>
</html>
> mayor
>= mayor o igual
< menor
<= menor o igual
!= distinto
== igual
Siempre debemos tener en cuenta que en la condición del if deben intervenir una variable un
operador relacional y otra variable o valor fijo.
Otra cosa que hemos incorporado es el operador + para cadenas de caracteres:
Con esto hacemos más corto la cantidad de líneas de nuestro programa, recordemos que veníamos
haciéndolo de la siguiente forma:
document.write(nombre);
document.write(' esta aprobado con un ');
document.write(nota);
Cuando se presenta la elección tenemos la opción de realizar una actividad u otra. Es decir
tenemos actividades por el verdadero y por el falso de la condición. Lo más importante que hay
que tener en cuenta es que se realizan las actividades de la rama del verdadero o las del falso,
NUNCA se realizan las actividades de las dos ramas.
En una estructura condicional compuesta tenemos entradas, salidas, operaciones, tanto por la
rama del verdadero como por la rama del falso.
Ejemplo: Realizar un programa que lea dos números distintos y muestre el mayor de ellos:
<html>
<head>
</head>
<body>
<script language="javascript">
var num1,num2;
num1=prompt('Ingrese el primer número:','');
num2=prompt('Ingrese el segundo número:','');
num1=parseInt(num1);
num2=parseInt(num2);
if (num1>num2)
6
{
document.write('el mayor es '+num1);
}
else
{
document.write('el mayor es '+num2);
}
</script>
</body>
</html>
La función prompt retorna un string por lo que debemos convertirlo a entero cuando queremos
saber cual de los dos valores es mayor numéricamente. En el lenguaje JavaScript una variable
puede ir cambiando el tipo de dato que almacena a lo largo de la ejecución del programa.
Más adelante veremos qué sucede cuando preguntamos cuál de dos string es mayor.
Estamos en presencia de una ESTRUCTURA CONDICIONAL COMPUESTA ya que tenemos actividades
por la rama del verdadero y del falso.
La estructura condicional compuesta tiene la siguiente codificación:
if (<condición>)
{
<Instruccion(es)>
}
else
{
<Instruccion(es)>
}
Es igual que la estructura condicional simple salvo que aparece la palabra clave “else” y
posteriormente un bloque { } con una o varias instrucciones.
Si la condición del if es verdadera se ejecuta el bloque que aparece después de la condición, en
caso que la condición resulte falsa se ejecuta la instrucción o bloque de instrucciones que
indicamos después del else.
Decimos que una estructura condicional es anidada cuando por la rama del verdadero o el falso de
una estructura condicional hay otra estructura condicional.
Ejemplo: Confeccionar un programa que pida por teclado tres notas de un alumno, calcule el
promedio e imprima alguno de estos mensajes:
Si el promedio es >=7 mostrar "Promocionado".
Si el promedio es >=4 y <7 mostrar "Regular".
Si el promedio es <4 mostrar "Reprobado".
Solución:
<html>
<head>
</head>
<body>
<script language="javascript">
var nota1,nota2,nota3;
nota1=prompt('Ingrese 1ra. nota:','');
nota2=prompt('Ingrese 2da. nota:','');
nota3=prompt('Ingrese 3ra. nota:','');
//Convertimos los 3 string en enteros
nota1=parseInt(nota1);
nota2=parseInt(nota2);
nota3=parseInt(nota3);
var pro;
7
pro=(nota1+nota2+nota3)/3;
if (pro>=7)
{
document.write('promocionado');
}
else
{
if (pro>=4)
{
document.write('regular');
}
else
{
document.write('reprobado');
}
}
</script>
</body>
</html>
Analicemos el siguiente programa. Se ingresan tres string por teclado que representan las notas de
un alumno, se transformas a variables enteras y se obtiene el promedio sumando los tres valores y
dividiendo por 3 dicho resultado. Primeramente preguntamos si el promedio es superior o igual a 7,
en caso afirmativo por la rama del verdadero de la estructura condicional mostramos un mensaje
que indique 'Promocionado' (con comillas indicamos un texto que debe imprimirse en pantalla).
En caso que la condición nos de falso, por la rama del falso aparece otra estructura condicional,
porque todavía debemos averiguar si el promedio del alumno es superior/ igual a cuatro o inferior a
cuatro.
Los comentarios en JavaScript los hacemos disponiendo dos barras previas al comentario:
/*
linea de comentario 1.
linea de comentario 2.
etc.
*/
El operador &&, traducido se lo lee como "Y". Se emplea cuando en una estructura condicional se
disponen dos condiciones.
Cuando vinculamos dos o más condiciones con el operador "&&" las dos condiciones deben ser
verdaderas para que el resultado de la condición compuesta de Verdadero y continúe por la rama
del verdadero de la estructura condicional.
Recordemos que la condición debe ir entre paréntesis en forma obligatoria.
La utilización de operadores lógicos permiten en muchos casos, plantear algoritmos más cortos y
comprensibles.
Veamos un ejemplo: Confeccionar un programa que lea por teclado tres números distintos y nos
muestre el mayor de ellos.
<html>
8
<head>
</head>
<body>
<script language="javascript">
var num1,num2,num3;
num1=prompt('Ingrese primer número:','');
num2=prompt('Ingrese segundo número:','');
num3=prompt('Ingrese tercer número:','');
num1=parseInt(num1);
num2=parseInt(num2);
num3=parseInt(num3);
if (num1>num2 && num1>num3)
{
document.write('el mayor es el '+num1);
}
else
{
if (num2>num3)
{
document.write('el mayor es el '+num2);
}
else
{
document.write('el mayor es el '+num3);
}
}
</script>
</body>
</html>
Ejemplo: Se carga una fecha (día, mes y año) por teclado. Mostrar un mensaje si corresponde al
primer trimestre del año (enero, febrero o marzo).
Cargar por teclado el valor numérico del día, mes y año por separado.
<html>
<head>
</head>
<body>
<script language="javascript">
var dia,mes,año;
dia=prompt('Ingrese día:','');
9
mes=prompt('Ingrese mes:','');
año=prompt('Ingrese año:','');
dia=parseInt(dia);
mes=parseInt(mes);
año=parseInt(año);
if (mes==1 || mes==2 || mes==3)
{
document.write('corresponde al primer trimestre del año.');
}
</script>
</body>
</html>
La carga de una fecha se hace por partes, ingresamos las variables dia, mes y año.
11-Estructuras switch.
<html>
<head>
</head>
<body>
<script language="javascript">
var valor;
valor=prompt('Ingrese un valor comprendido entre 1 y 5:','');
//Convertimos a entero
valor=parseInt(valor);
switch (valor) {
case 1: document.write('uno');
break;
case 2: document.write('dos');
break;
case 3: document.write('tres');
break;
case 4: document.write('cuatro');
break;
case 5: document.write('cinco');
break;
default:document.write('debe ingresar un valor comprendido entre 1 y 5.');
}
</script>
<A href="pagina2.html">Ver segundo problema</a>
</body>
</html>
Debemos tener en cuenta que la variable que analizamos debe ir después de la instrucción switch
entre paréntesis. Cada valor que se analiza debe ir luego de la palabra clave 'case' y seguido a los
dos puntos, las instrucciones a ejecutar, en caso de verificar dicho valor la variable que analiza el
switch.
Es importante disponer la palabra clave 'break' al finalizar cada caso. La instrucciones que hay
después de la palabra clave 'default' se ejecutan en caso que la variable no se verifique en algún
case. De todos modos el default es opcional en esta instrucción.
Plantearemos un segundo problema para ver que podemos utilizar variables de tipo cadena con la
10
instrucción switch.
Ingresar por teclado el nombre de un color (rojo, verde o azul), luego pintar el fondo de la ventana
con dicho color:
<html>
<head>
</head>
<body>
<script language="javascript">
var col;
col=prompt('Ingrese el color con que se quiere pintar el fondo de la ventana
(rojo, verde, azul)' ,'');
switch (col) {
case 'rojo': document.bgColor='#ff0000';
break;
case 'verde': document.bgColor='#00ff00';
break;
case 'azul': document.bgColor='#0000ff';
break;
}
</script>
</body>
</html>
Hasta ahora hemos empleado estructuras SECUENCIALES y CONDICIONALES. Existe otro tipo de
estructuras tan importantes como las anteriores que son las estructuras REPETITIVAS.
Una estructura repetitiva permite ejecutar una instrucción o un conjunto de instrucciones varias
veces.
Funcionamiento del while: En primer lugar se verifica la condición, si la misma resulta verdadera se
ejecutan las operaciones que indicamos entre las llaves que le siguen al while.
En caso que la condición sea Falsa continua con la instrucción siguiente al bloque de llaves.
El bloque se repite MIENTRAS la condición sea Verdadera.
Ejemplo: Realizar un programa que imprima en pantalla los números del 1 al 100.
Sin conocer las estructuras repetitivas podemos resolver el problema empleando una estructura
secuencial. Inicializamos una variable con el valor 1, luego imprimimos la variable, incrementamos
nuevamente la variable y así sucesivamente.
<html>
<head>
11
</head>
<body>
<script language="javascript">
var x;
x=1;
while (x<=100)
{
document.write(x);
document.write('<br>');
x=x+1;
}
</script>
</body>
</html>
Para que se impriman los números, uno en cada línea, agregamos la marca HTML de <br>.
Es muy importante analizar este programa:
La primera operación inicializa la variable x en 1, seguidamente comienza la estructura repetitiva
while y disponemos la siguiente condición ( x <= 100), se lee MIENTRAS la variable x sea menor o
igual a 100.
Al ejecutarse la condición, retorna VERDADERO, porque el contenido de x (1) es menor o igual a
100. Al ser la condición verdadera se ejecuta el bloque de instrucciones que contiene la estructura
while. El bloque de instrucciones contiene dos salidas al documento y una operación. Se imprime el
contenido de x y seguidamente se incrementa la variable x en uno.
La operación x = x + 1 se lee como "en la variable x se guarda el contenido de x más 1". Es decir, si
x contiene 1 luego de ejecutarse esta operación se almacenará en x un 2.
No existe una RECETA para definir una condición de una estructura repetitiva, sino que se logra con
una práctica continua, solucionando problemas.
Una vez planteado el programa debemos verificar si el mismo es una solución válida al problema
(en este caso se deben imprimir los números del 1 al 100 en la página), para ello podemos hacer un
seguimiento del flujo del diagrama y los valores que toman las variables a lo largo de la ejecución:
x
1
2
3
4
.
.
100
101 Cuando x vale 101 la condición de la estructura
repetitiva retorna falso, en este caso finaliza el diagrama.
12
La variable x recibe el nombre de CONTADOR. Un contador es un tipo especial de variable que se
incrementa o decrementa con valores constantes durante la ejecución del programa. El contador x
nos indica en cada momento la cantidad de valores impresos en la página.
Importante: Podemos observar que el bloque repetitivo puede no ejecutarse si la condición retorna
falso la primera vez.
La variable x debe estar inicializada con algún valor antes que se ejecute la operación x = x + 1.
Probemos algunas modificaciones de este programa y veamos qué cambios se deberían hacer para:
1 - Imprimir los números del 1 al 500.
2 - Imprimir los números del 50 al 100.
3 - Imprimir los números del -50 al 0.
4 - Imprimir los números del 2 al 100 pero de 2 en 2 (2,4,6,8 ....100).
13-Concepto de acumulador.
<html>
<head>
</head>
<body>
<script language="javascript">
var x=1;
var suma=0;
var valor;
while (x<=5)
{
valor=prompt('Ingrese valor:','');
valor=parseInt(valor);
suma=suma+valor;
x=x+1;
}
document.write("La suma de los valores es "+suma+"<br>");
</script>
</body>
</html>
En este problema, a semejanza de los anteriores, llevamos un CONTADOR llamado x que nos sirve
para contar las vueltas que debe repetir el while.
También aparece el concepto de ACUMULADOR (un acumulador es un tipo especial de variable que
se incrementa o decrementa con valores variables durante la ejecución del programa).
Hemos dado el nombre de suma a nuestro acumulador. Cada ciclo que se repita la estructura
repetitiva, la variable suma se incrementa con el contenido ingresado en la variable valor.
valor suma x
0 0
(Antes de entrar a la estructura repetitiva estos son los valores).
5 5 1
16 21 2
7 28 3
10 38 4
2 40 5
Este es un seguimiento del programa planteado. Los números que toma la variable valor dependerá
de qué cifras cargue el operador durante la ejecución del programa.
13
Hay que tener en cuenta que cuando en la variable valor se carga el primer valor (en este ejemplo
es el valor 5), al cargarse el segundo valor (16), el valor anterior 5 se pierde, por ello la necesidad
de ir almacenando en la variable suma los valores ingresados.
La sentencia do/while es otra estructura repetitiva, la cual ejecuta al menos una vez su bloque
repetitivo, a diferencia del while que puede no ejecutar el bloque.
Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo menos una vez se
ejecutará el bloque repetitivo.
La condición de la estructura está abajo del bloque a repetir, a diferencia del while que está en la
parte superior.
Finaliza la ejecución del bloque repetitivo cuando la condición retorna falso, es decir igual que el
while.
Problema: Escribir un programa que solicite la carga de un número entre 0 y 999, y nos muestre un
mensaje de cuántos dígitos tiene el mismo. Finalizar el programa cuando se cargue el valor 0.
<html>
<head>
</head>
<body>
<script language="javascript">
var valor;
do {
valor=prompt('Ingrese un valor entre 0 y 999:','');
valor=parseInt(valor);
document.write('El valor '+valor+' tiene ');
if (valor<10)
{
document.write('Tiene 1 digitos');
}
else
{
if (valor<100)
{
document.write('Tiene 2 digitos');
}
else
{
document.write('Tiene 3 digitos');
}
}
document.write('<br>');
} while(valor!=0);
</script>
</body>
</html>
En este problema por lo menos se carga un valor. Si se carga un valor menor a 10 se trata de un
número de una cifra, si es mayor a 10 pero menor a 100 se trata de un valor de dos dígitos, en caso
contrario se trata de un valor de tres dígitos. Este bloque se repite mientras se ingresa en la
variable 'valor' un número distinto a 0.
Cualquier problema que requiera una estructura repetitiva se puede resolver empleando la
estructura while. Pero hay otra estructura repetitiva cuyo planteo es más sencillo en ciertas
situaciones.
14
Esta estructura se emplea en aquellas situaciones en las cuales CONOCEMOS la cantidad de veces
que queremos que se ejecute el bloque de instrucciones. Ejemplo: cargar 10 números, ingresar 5
notas de alumnos, etc. Conocemos de antemano la cantidad de veces que queremos que el bloque
se repita.
Por último, hay que decir que la ejecución de la sentencia break dentro de cualquier parte del
bucle provoca la salida inmediata del mismo.
Sintaxis:
for (<Inicialización> ; <Condición> ; <Incremento o Decremento>)
{
<Instrucciones>
}
Esta estructura repetitiva tiene tres argumentos: variable de inicialización, condición y variable de
incremento o decremento.
Funcionamiento:
- Primero se ejecuta por única vez el primer argumento .
Por lo general se inicializa una variable.
- El segundo paso es evaluar la (Condición), en caso de ser verdadera se ejecuta
el bloque,
en caso contrario continúa el programa.
- El tercer paso es la ejecución de las instrucciones.
- El cuarto paso es ejecutar el tercer argumento (Incremento o Decremento).
- Luego se repiten sucesivamente del Segundo al Cuarto Paso.
Este tipo de estructura repetitiva se utiliza generalmente cuando sabemos la cantidad de veces que
deseamos que se repita el bloque.
<html>
<head>
</head>
<body>
<script language="javascript">
var f;
for(f=1;f<=10;f++)
{
document.write(f+" ");
}
</script>
</body>
</html>
Importante: Tener en cuenta que no lleva punto y coma al final de los tres argumentos del for. El
disponer un punto y coma provoca un error lógico y no sintáctico, por lo que el navegador no
avisará.
16-Funciones
15
En programación es muy frecuente que un determinado procedimiento de cálculo definido por un
grupo de sentencias tenga que repetirse varias veces, ya sea en un mismo programa o en otros
programas, lo cual implica que se tenga que escribir tantos grupos de aquellas sentencias como
veces aparezca dicho proceso.
La herramienta más potente con que se cuenta para facilitar, reducir y dividir el trabajo en
programación, es escribir aquellos grupos de sentencias una sola y única vez bajo la forma de una
FUNCION.
Un programa es una cosa compleja de realizar y por lo tanto es importante que esté bien
ESTRUCTURADO y también que sea inteligible para las personas. Si un grupo de sentencias realiza
una tarea bien definida, entonces puede estar justificado el aislar estas sentencias formando una
función, aunque resulte que sólo se le llame o use una vez.
Hasta ahora hemos visto como resolver un problema planteando un único algoritmo.
Con funciones podemos segmentar un programa en varias partes.
Frente a un problema, planteamos un algoritmo, éste puede constar de pequeños algoritmos.
Una función es un conjunto de instrucciones que resuelven una parte del problema y que puede ser
utilizado (llamado) desde diferentes partes de un programa.
Consta de un nombre y parámetros. Con el nombre llamamos a la función, es decir, hacemos
referencia a la misma. Los parámetros son valores que se envían y son indispensables para la
resolución del mismo. La función realizará alguna operación con los parámetros que le enviamos.
Podemos cargar una variable, consultarla, modificarla, imprimirla, etc.
Incluso los programas más sencillos tienen la necesidad de fragmentarse. Las funciones son los
únicos tipos de subprogramas que acepta JavaScript. Tienen la siguiente estructura:
Debemos buscar un nombre de función que nos indique cuál es su objetivo (Si la función recibe un
string y lo centra, tal vez deberíamos llamarla centrarTitulo). Veremos que una función puede
variar bastante en su estructura, puede tener o no parámetros, retornar un valor, etc.
Ejemplo: Mostrar un mensaje que se repita 3 veces en la página con el siguiente texto:
'Cuidado'
'Ingrese su documento correctamente'
'Cuidado'
'Ingrese su documento correctamente'
'Cuidado'
'Ingrese su documento correctamente'
<html>
<head>
</head>
<body>
<script language="javascript">
document.write("Cuidado<br>");
document.write("Ingrese su documento correctamente<br>");
document.write("Cuidado<br>");
document.write("Ingrese su documento correctamente<br>");
document.write("Cuidado<br>");
document.write("Ingrese su documento correctamente<br>");
16
</script>
</body>
</html>
<html>
<head>
</head>
<body>
<script languaje="javascript">
function mostrarMensaje()
{
document.write("Cuidado<br>");
document.write("Ingrese su documento correctamente<br>");
}
mostrarMensaje();
mostrarMensaje();
mostrarMensaje();
</script>
</body>
</html>
<html>
<head>
</head>
<body>
<script language="javascript">
function mostrarComprendidos(x1,x2)
{
var inicio;
for(inicio=x1;inicio<=x2;inicio++)
{
document.write(inicio+' ');
}
}
var valor1,valor2;
valor1=prompt('Ingrese valor inferior:','');
valor1=parseInt(valor1);
valor2=prompt('Ingrese valor superior:','');
valor2=parseInt(valor2);
17
mostrarComprendidos(valor1,valor2);
</script>
</body>
</html>
El programa de JavaScript empieza a ejecutarse donde definimos las variables valor1 y valor2 y no
donde se define la función. Luego de cargar los dos valores por teclado se llama a la función
mostrarComprendidos y le enviamos las variables valor1 y valor2. Los parámetors x1 y x2 reciben
los contenidos de las variables valor1 y valor 2.
Es importante notar que a la función la podemos llamar la cantidad de veces que la necesitemos
Son comunes los casos donde una función, luego de hacer un proceso, retorne un valor.
Ejemplo 1: Confeccionar una función que reciba un valor entero comprendido entre 1 y 5. Luego
retornar en castellano el valor recibido.
<html>
<head>
</head>
<body>
<script language="javascript">
function convertirCastellano(x)
{
if (x==1)
return "uno";
else
if (x==2)
return "dos";
else
if (x==3)
return "tres";
else
if (x==4)
return "cuatro";
else
if (x==5)
return "cinco";
else
return "valor incorrecto";
}
var valor;
valor=prompt("Ingrese un valor entre 1 y 5","");
valor=parseInt(valor);
var r;
r=convertirCastellano(valor);
document.write(r);
</script>
</body>
</html>
Podemos ver que el valor retornado por una función lo indicamos por medio de la palabra clave
return. Cuando se llama a la función, debemos asignar el nombre de la función a una variable, ya
que la misma retorna un valor.
Una función puede tener varios parámetros, pero sólo puede retornar un único valor.
La estructura condicional if de este ejemplo puede ser remplazada por la instrucción switch, la
función queda codificada de la siguiente manera:
18
function convertirCastellano(x)
{
switch (x)
{
case 1:return "uno";
case 2:return "dos";
case 3:return "tres";
case 4:return "cuatro";
case 5:return "cinco";
default:return "valor incorrecto";
}
}
Esta es una forma más elegante que una serie de if anidados. La instrucción switch analiza el
contenido de la variable x con respecto al valor de cada caso. En la situación de ser igual, ejecuta
el bloque seguido de los 2 puntos hasta que encuentra la instrucción return o break.
Ejemplo 2: Confeccionar una función que reciba una fecha con el formato de día, mes y año y
retorne un string con un formato similar a: "Hoy es 10 de junio de 2003".
<html>
<head>
</head>
<body>
<script language="javascript">
function formatearFecha(dia,mes,año)
{
var s='Hoy es '+dia+' de ';
switch (mes) {
case 1:s=s+'enero ';
break;
case 2:s=s+'febrero ';
break;
case 3:s=s+'marzo ';
break;
case 4:s=s+'abril ';
break;
case 5:s=s+'mayo ';
break;
case 6:s=s+'junio ';
break;
case 7:s=s+'julio ';
break;
case 8:s=s+'agosto ';
break;
case 9:s=s+'septiembre ';
break;
case 10:s=s+'octubre ';
break;
case 11:s=s+'noviembre ';
break;
case 12:s=s+'diciembre ';
break;
} //fin del switch
s=s+'de '+año;
return s;
}
document.write(formatearFecha(11,6,2006));
19
</script>
</body>
</html>
Analicemos un poco la función formatearFecha. Llegan tres parámetros con el día, mes y año.
Definimos e inicializamos una variable con:
s=s+'enero ';
Esto, si el parámetro mes tiene un uno. Observemos como acumulamos lo que tiene 's' más el string
'enero '. En caso de hacer s='enero ' perderíamos el valor previo que tenía la variable s.
Por último concatenamos el año:
s=s+'de '+año;
Cuando se llama a la función directamente, al valor devuelto se lo enviamos a la función write del
objeto document. Esto último lo podemos hacer en dos pasos:
Un objeto es una estructura que contiene tanto las variables (llamadas propiedades) como las
funciones que manipulan dichas variables (llamadas métodos). A partir de esta estructura se ha
creado un nuevo modelo de programación (la programación orientada a objetos) que atribuye a los
mismos propiedades como herencia o polimorfismo. Como veremos, JavaScript simplifica en algo
este modelo y hace una programación híbrida entre la programación estructurada y la
programación orientada a objetos.
El modelo de la programación orientada a objetos normal y corriente separa los mismos en dos:
clases e instancias (objetos). Las primeras son entes más abstractos que definen un conjunto
determinado de objetos. Las segundas son miembros de una clase, poseyendo las mismas
propiedades que la clase a la cual pertenecen.
Propiedades y métodos.
Para acceder a los métodos y propiedades de un objeto debemos utilizar la siguiente sintaxis:
objeto.propiedad
objeto.metodo(parametros)
Conceptos Básicos.
Objetos
Son todas las cosas con identidad propia. Se relacionan entre si. Poseen características (atributos)
y tienen responsabilidades (funciones, métodos) que deben cumplir. Son ejemplares (instancias) de
una clase y conocen a la clase a la cual pertenecen.
Atributos o propiedades
Son las características, cualidades distintivas de cada objeto. Deben ser mínimos para poder
20
realizar todas las operaciones que requiere la aplicación.
- Casa:
atributos: tamaño, precio, cantidad de habitaciones, etc.;
responsabilidades: comodidad, seguridad, etc.
- Mesa:
atributos: altura, largo, ancho, etc.;
responsabilidades: contener elementos.
- Ventana:
atributos: tamaño, color, etc.;
responsabilidades: abrirse, cerrarse, etc.
- Ventana:
atributos: tamaño, color, etc.;
responsabilidades: mostrar título,achicarse
etc.
Responsabilidades o Métodos.
Son las responsabilidades que debe cumplir la clase. El objetivo de un método es ejecutar las
actividades que tiene encomendada la clase.
Es un algoritmo (conjunto de operaciones) que se ejecuta en respuesta a un mensaje; respuestas a
mensajes para satisfacer peticiones.
Un método consiste en el nombre de la operación y sus argumentos. El nombre del método
identifica una operación que se ejecuta.
Un método está determinado por la clase del objeto receptor, todos los objetos de una clase usan
el mismo método en respuesta a mensajes similares.
La interpretación de un mensaje (selección del método ejecutado) depende del receptor y puede
variar con distintos receptores, es decir, puede variar de una clase a otra.
Clases
Una clase es una agrupación de objetos que comparten las mismas propiedades y comportamientos.
Es un molde para objetos que poseen las mismas características (que pueden recibir los mismos
mensajes y responden de la misma manera).
Una clase es una representación de una idea o concepto. Unidad que encapsula códigos y datos
para los métodos (operaciones).
Todos los ejemplares de una clase se comportan de forma similar (invocan el mismo método) en
respuesta a mensajes similares.
La clase a la cual pertenece un objeto determina el comportamiento del objeto.
Una clase tiene encomendadas actividades que ejecutan los métodos.
Las clases están definidas por:
- Atributos (Propiedades),
- Comportamiento (operaciones o métodos) y
- Relaciones con otros objetos.
20-Clase Date
21
JavaScript dispone de varias clases predefinidos para acceder a muchas de las funciones normales
de cualquier lenguaje, como puede ser el manejo de vectores o el de fechas.
Si no utilizamos parámetros, el objeto fecha contendrá la fecha y hora actuales, obtenidas del reloj
de nuestra computadora. En caso contrario hay que tener en cuenta que los meses comienzan por
cero. Así, por ejemplo:
getYear()
setYear(año)
Obtiene y coloca, respectivamente, el año de la fecha.
Éste se devuelve como número de 4 dígitos excepto en el
caso en que esté entre 1900 y 1999, en cuyo caso
devolverá las dos últimas cifras.
getFullYear()
setFullYear(año)
Realizan la misma función que los anteriores, pero sin
tanta complicación, ya que siempre devuelven números
con todos sus dígitos.
getMonth()
setMonth(mes)
getDate()
setDate(dia)
getHours()
setHours(horas)
getMinutes()
setMinutes(minutos)
getSeconds()
setSeconds(segundos)
Obtienen y colocan, respectivamente, el mes, día, hora,
minuto y segundo de la fecha.
getDay()
Devuelve el día de la semana de la fecha en forma de
número que va del 0 (domingo) al 6 (sábado)
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function mostrarFechaHora()
{
var fecha
fecha=new Date();
document.write('Hoy es ');
document.write(fecha.getDate()+'/');
document.write((fecha.getMonth()+1)+'/');
document.write(fecha.getYear());
document.write('<br>');
document.write('Es la hora ');
document.write(fecha.getHours()+':');
document.write(fecha.getMinutes()+':');
22
document.write(fecha.getSeconds());
}
//Llamada a la función
mostrarFechaHora();
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
En este problema hemos creado un objeto de la clase Date. Luego llamamos una serie de métodos
que nos retornan datos sobre la fecha y hora actual del equipo de computación donde se está
ejecutando el navegador.
Es bueno notar que para llamar a los métodos disponemos:
21-Clase Array
Ejemplo 1: Crear un vector para almacenar los cinco sueldos de operarios y luego mostrar el total
de gastos en sueldos (cada actividad en una función).
<HTML>
<HEAD>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
function cargar(sueldos)
{
var f;
for(f=0;f<sueldos.length;f++)
{
var v;
v=prompt('Ingrese sueldo:','');
sueldos[f]=parseInt(v);
}
}
function calcularGastos(sueldos)
{
var total=0;
var f;
for(f=0;f<sueldos.length;f++)
{
total=total+sueldos[f];
}
document.write('Listado de sueldos<br>');
for(f=0;f<sueldos.length;f++)
{
document.write(sueldos[f]+'<br>');
}
document.write('Total de gastos en sueldos:'+total);
}
var sueldos;
sueldos=new Array(5);
23
cargar(sueldos);
calcularGastos(sueldos);
</SCRIPT>
</BODY>
</HTML>
Recordemos que el programa comienza a ejecutarse a partir de las líneas que se encuentran fuera
de la funciones:
var sueldos;
sueldos=new Array(5);
cargar(sueldos);
calcularGastos(sueldos);
Ejemplo 2: Crear un vector con elementos de tipo string. Almacenar los meses de año. En otra
función solicitar el ingreso de un número entre 1 y 12. Mostrar a qué mes corresponde y cuántos
días tiene dicho mes.
<HTML>
<HEAD></HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
function mostrarFecha(meses,dias)
{
var num;
num=prompt('Ingrese número de mes:','');
num=parseInt(num);
document.write('Corresponde al mes:'+meses[num-1]);
document.write('<br>');
document.write('Tiene '+dias[num-1]+' días');
}
var meses;
meses=new Array(12);
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';
var dias;
dias=new Array(12);
dias[0]=31;
24
dias[1]=28;
dias[2]=31;
dias[3]=30;
dias[4]=31;
dias[5]=30;
dias[6]=31;
dias[7]=31;
dias[8]=30;
dias[9]=31;
dias[10]=30;
dias[11]=31;
mostrarFecha(meses,dias);
</SCRIPT>
</BODY>
</HTML>
En este problema definimos dos vectores, uno para almacenar los meses y otro los días. Decimos
que se trata de vectores paralelos porque en la componente cero del vector meses almacenamos el
string 'Enero' y en el vector dias, la cantidad de días del mes de enero.
Es importante notar que cuando imprimimos, disponemos como subíndice el valor ingresado menos
1, esto debido a que normalmente el operador de nuestro programa carga un valor comprendido
entre 1 y 12. Recordar que los vectores comienzan a numerarse a partir de la componente cero.
document.write('Corresponde al mes:'+meses[num-1]);
22-Clase Math
Esta clase no está construido para que tengamos nuestras variables Math, sino como un contenedor
que tiene diversas constantes (como Math.E y Math.PI) y los siguientes métodos matemáticos:
Resultado
Expresión de
Método Descripción del
ejemplo
ejemplo
asin, acos,
Funciones trigonométricas inversas Math.asin(1) 1.57
atan
25
min, max Devuelve el menor (o mayor) de sus dos argumentos Math.min(2,4) 2
Ejemplo: Confeccionar un programa que permita cargar un valor comprendido entre 1 y 10. Luego
generar un valor aleatorio entre 1 y 10, mostrar un mensaje con el número sorteado e indicar si
ganó o perdió:
<html>
<head>
</head>
<body>
<script language="JavaScript">
var selec=prompt('Ingrese un valor entre 1 y 10','');
selec=parseInt(selec);
var num=parseInt(Math.random()*10)+1;
if (num==selec)
document.write('Ganó el número que se sorteó es el '+ num);
else
document.write('Lo siento se sorteó el valor '+num+' y usted eligió el '+selec);
</script>
</body>
</html>
var num=parseInt(Math.random()*10)+1;
Al multiplicar Math.random() por 10, nos genera un valor aleatorio comprendido entre un valor
mayor a 0 y menor a 10, luego, con la función parseInt, obtenemos sólo la parte entera.
Finalmente sumamos uno.
El valor que cargó el operador se encuentra en:
Con un simple if validamos si coinciden los valores (el generado y el ingresado por teclado).
23-Clase String.
Un string consiste en uno o más caracteres encerrados entre simple o doble comillas.
Concatenación de cadenas (+)
JavaScript permite concatenar cadenas utilizando el operador +.
El siguiente fragmento de código concatena tres cadenas para producir su salida:
26
Dos de las cadenas concatenadas son cadenas literales. La del medio es un entero que
automáticamente se convierte a cadena y luego se concatena con las otras.
Propiedad length
Retorna la cantidad de caracteres de un objeto String.
var nom='Juan';
document.write(nom.length); //Resultado 4
Métodos
charAt(pos)
Retorna el caracter del índice especificado. Comienzan a numerarse de la posición cero.
var nombre='juan';
var caracterPrimero=nombre.charAt(0);
cadena3=cadena1.substring(2,5);
En este ejemplo, "cadena3" contendrá los caracteres 2, 3, 4 sin incluir el 5 de cadena1 (Cuidado
que comienza en cero).
indexOf (subCadena)
Devuelve la posición de la subcadena dentro de la cadena, o -1 en caso de no estar.
Tener en cuenta que puede retornar 0 si la subcadena coincide desde el primer caracter.
toUpperCase()
Convierte todos los caracteres del String que invoca el método a mayúsculas:
cadena1=cadena1.toUpperCase();
cadena1=cadena1.toLowerCase();
Ejemplo: Cargar un string por teclado y luego llamar a los distintos métodos de la clase String y la
propiedad length.
<html>
<head>
</head>
<body>
27
<script language="JavaScript">
var cadena=prompt('Ingrese una cadena:','');
document.write('La cadena ingresada es:'+cadena);
document.write('<br>');
document.write('La cantidad de caracteres son:'+cadena.length);
document.write('<br>');
document.write('El primer caracter es:'+cadena.charAt(0));
document.write('<br>');
document.write('Los primeros 3 caracteres son:'+cadena.substring(0,3));
document.write('<br>');
if (cadena.indexOf('hola')!=-1)
document.write('Se ingresó la subcadena hola');
else
document.write('No se ingresó la subcadena hola');
document.write('<br>');
document.write('La cadena convertida a mayúsculas es:'+cadena.toUpperCase());
document.write('<br>');
document.write('La cadena convertida a minúsculas es:'+cadena.toLowerCase());
document.write('<br>');
</script>
</body>
</html>
24-Formularios y Eventos.
El uso de JavaScript en los formularios HTML se hace fundamentalmente con el objetivo de validar
los datos ingresados. Se hace esta actividad en el cliente (navegador) para desligar de esta
actividad al servidor que recibirá los datos ingresados por el usuario.
Esta posibilidad de hacer pequeños programas que se ejecutan en el navegador, evitan
intercambios innecesarios entre el cliente y el servidor (navegador y sitio web).
Suponemos que conoce las marcas para la creación de formularios en una página web:
El navegador crea un objeto por cada control visual que aparece dentro de la página. Nosotros
podemos acceder posteriormente desde JavaScript a dichos objetos.
El objeto principal es el FORM que contendrá todos los otros objetos: TEXT (editor de líneas),
TEXTAREA (editor de varias líneas), etc.
Nuestra actividad en JavaScript es procesar los eventos que generan estos controles (un evento es
una acción que se dispara, por ejemplo si se presiona un botón).
Vamos a hacer en problema muy sencillo empleando el lenguaje JavaScript; dispondremos un botón
y cada vez que se presione, mostraremos un contador:
<html>
<head>
</head>
<body>
<script language="JavaScript">
var contador=0;
28
function incrementar()
{
contador++;
alert('El contador ahora vale :' + contador);
}
</script>
<form>
<input type="button" onClick="incrementar()" value="incrementar">
</form>
</body>
</html>
A los eventos de los objetos HTML se les asocia una función, dicha función se ejecuta cuando se
dispara el evento respectivo. En este caso cada vez que presionamos el botón, se llama a la función
incrementar, en la misma incrementamos la variable contador en uno. Hay que tener en cuenta
que a la variable contador la definimos fuera de la función para que no se inicialice cada vez que
se dispara el evento.
La función alert crea una ventana que puede mostrar un mensaje.
Hasta ahora hemos visto como crear un formulario con controles de tipo BUTTON. Agregamos un
control de tipo TEXT (permite al operador cargar caracteres por teclado).
Ahora veremos la importancia de definir un NAME a todo control de un formulario.
Con un ejemplo veremos estos controles: Confeccionar un formulario que permita ingresar el
nombre y edad de una persona:
<html>
<head></head>
<body>
<script language="JavaScript">
function mostrar()
{
var nom=document.form1.nombre.value;
var ed=document.form1.edad.value;
alert('Ingreso el nombre:' + nom);
alert('Y la edad:' + ed);
}
</script>
<form name="form1">
Ingrese su nombre:
<input type="text" name="nombre"><br>
Ingrese su edad:
<input type="text" name="edad"><br>
<input type="button" value="Confirmar" onClick="mostrar()">
</form>
</body>
</html>
En este problema tenemos cuatro controles: 1 FORM, 1 BUTTON, 2 TEXT. El evento que se dispara
al presionar el botón se llama mostrar.
La función 'mostrar' accede a los contenidos de los dos controles de tipo TEXT:
var nom=document.form1.nombre.value;
var ed=document.form1.edad.value;
29
Para hacer más clara la función guardamos en dos variables auxiliares los contenidos de los
controles de tipo TEXT. Hay que tener en cuenta que a nuestra página la accedemos por medio del
objeto: document, luego, al formulario que hemos creado, lo accedemos por el NAME que le dimos
al formulario, en este caso: form1, luego, a cada control que contiene el formulario, lo accedemos
nuevamento por su NAME, es decir: nombre y edad respectivamente. Por último, para acceder a las
cadenas cargadas debemos indicar la propiedad value.
26-Control PASSWORD
Esta marca es una variante de la de tipo "TEXT". La diferencia fundamental es que cuando se carga
un texto en el campo de edición sólo muestra asteriscos en pantalla, es decir, es fundamental para
el ingreso de claves y para que otros usuarios no vean los caracteres que tipeamos.
La mayoría de las veces este dato se procesa en el servidor. Pero podemos en el cliente (es decir
en el navegador) verificar si ha ingresado una cantidad correcta de caracteres, por ejemplo.
Ejemplo: Codificar una página que permita ingresar una password y luego muestre una ventana de
alerta si tiene menos de 5 caracteres.
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function validar()
{
if (document.form1.text1.value.length<5)
{
alert("Ingrese al menos 5 caracteres");
document.form1.text1.value="";
}
}
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="form1">
Ingrese clave(al menos 5 caracteres): <INPUT TYPE="password" NAME="text1">
<INPUT TYPE="button" ONCLICK="validar()" VALUE="Enviar">
</FORM>
</BODY>
</HTML>
En este problema debemos observar que cuando ingresamos caracteres dentro del campo de
edición sólo vemos asteriscos, pero realmente en memoria se almacenan los caracteres tipeados. Si
queremos mostrar los caracteres ingresados debemos acceder a:
document.form1.text1.value
if (document.form1.text1.value.length<5)
27-Control SELECT
Este otro objeto visual que podemos disponer en un FORM permite realizar la selección de un string
de una lista y tener asociado al mismo un valor no visible. El objetivo fundamental en JavaScript es
30
determinar qué elemento está seleccionado y qué valor tiene asociado. Esto lo hacemos cuando
ocurre el evento OnChange.
document.form1.select1.options[document.form1.select1.selectedIndex].text
Es decir que el objeto select1 tiene otra propiedad llamada options, a la que accedemos por medio
de un subíndice, al string de una determinada posición.
Hay problemas en los que solamente necesitaremos el string almacenado en el objeto SELECT y no
el valor asociado (no es obligatorio asociar un valor a cada string).
Y por último con esta expresión accedemos al valor asociado al string:
document.form1.select1.options[document.form1.select1.selectedIndex].value
<html>
<head>
</head>
<body>
<script language="JavaScript">
function cambiarColor()
{
document.form1.text1.value = document.form1.select1.selectedIndex;
document.form1.text2.value =
document.form1.select1.options[document.form1.select1.selectedIndex].text;
document.form1.text3.value =
document.form1.select1.options [document.form1.select1.selectedIndex].value;
}
</script>
<form name="form1">
<select size="1" name="select1" ONCHANGE="cambiarColor()">
<option value="0xff0000">Rojo</option>
<option value="0x00ff00">Verde</option>
<option value="0x0000ff">Azul</option>
</select></p>
<br>
Número de índice seleccionado del objeto SELECT:<input type="text"
name="text1"><br>
Texto seleccionado:<input type="text" name="text2"><br>
Valor asociado:<input type="text" name="text3"><br>
</form>
</body>
</html>
Se debe analizar en profundidad este problema para comprender primeramente la creación del
objeto SELECT en HTML, y cómo acceder luego a sus valores desde JavaScript.
Es importante para el objeto SELECT definir qué función llamar cuando ocurra un cambio:
onChange="cambiarColor()".
Por cada opción del objeto SELECT tenemos una línea:
Rojo
31
Donde Rojo es el string que se visualiza en el objeto SELECT y value es el valor asociado a dicho
string.
Analizando la función cambiarColor() podemos ver cómo obtenemos los valores fundamentales del
objeto SELECT.
28-Control CHECKBOX
<html>
<head>
</head>
<body>
<script language="JavaScript">
function contarSeleccionados()
{
var cant=0;
if (document.form1.lenguaje1.checked)
cant++;
if (document.form1.lenguaje2.checked)
cant++;
if (document.form1.lenguaje3.checked)
cant++;
if (document.form1.lenguaje4.checked)
cant++;
alert('Conoce ' + cant + ' lenguajes');
}
</script>
<form name="form1">
<input type="checkbox" name="lenguaje1">JavaScript<br>
<input type="checkbox" name="lenguaje2">PHP<br>
<input type="checkbox" name="lenguaje3">JSP<br>
<input type="checkbox" name="lenguaje4">VB.Net<br>
if (document.form1.lenguaje1.checked)
cant++;
Al contador 'cant' lo definimos e inicializamos en cero previo a los cuatro if. Mostramos finalmente
el resultado final.
29-Control RADIO
32
Los objetos RADIO tienen sentido cuando disponemos varios elementos. Sólo uno puede estar
seleccionado del conjunto.
Ejemplo: Mostrar cuatro objetos de tipo RADIO que permitan seleccionar los estudios que tiene un
usuario:
<html>
<head>
</head>
<body>
<script language="JavaScript">
function mostrarSeleccionado()
{
if (document.form1.estudios[0].checked)
alert('no tienes estudios');
if (document.form1.estudios[1].checked)
alert('tienes estudios primarios');
if (document.form1.estudios[2].checked)
alert('tienes estudios secundarios');
if (document.form1.estudios[3].checked)
alert('tienes estudios universitarios');
}
</script>
<form name="form1">
<input type="radio" name="estudios" value="sin estudios">Sin
estudios
<br>
<input type="radio" name="estudios">Primarios
<br>
<input type="radio" name="estudios">Secundarios
<br>
<input type="radio" name="estudios">Universitarios
<br>
<input type="button" value="Mostrar" onClick="mostrarSeleccionado()">
</form>
</body>
</html>
Es importante notar que todos los objetos de tipo RADIO tienen el mismo name. Luego podemos
acceder a cada elemento por medio de un subíndice:
if (document.form1.estudios[0].checked)
alert('no tienes estudios');
Igual que el checkbox, la propiedad checked retorna true o false, según esté o no seleccionado el
control radio.
30-Control TEXTAREA
Este control es similar al control TEXT, salvo que permite el ingreso de muchas líneas de texto.
La marca TEXTAREA en HTML tiene dos propiedades: rows y cols que nos permiten indicar la
cantidad de filas y columnas a mostrar en pantalla.
Ejemplo: Solicitar la carga del mail y el curriculum de una persona. Mostrar un mensaje si el
curriculum supera los 2000 caracteres.
<html>
<head>
</head>
<body>
<script language="JavaScript">
function controlarCaracteres()
33
{
if (document.form1.curriculum.value.length>2000)
alert('curriculum muy largo');
else
alert('datos correctos');
}
</script>
<form name="form1">
<textarea name="curriculum" rows="10" cols="50"
></textarea>
<br>
<input type="button" value="Mostrar" onClick="controlarCaracteres()">
</form>
</body>
</html>
if (document.form1.curriculum.value.length>2000)
El evento onFocus se dispara cuando el objeto toma foco y el evento onBlur cuando el objeto
pierde el foco.
Ejemplo: Implementar un formulario que solicite la carga del nombre y la edad de una persona.
Cuando el control tome foco borrar el contenido actual, al abandonar el mismo, mostrar un
mensaje de alerta si el mismo está vacío.
<html>
<head></head>
<body>
<script language="JavaScript">
function vaciar(control)
{
control.value='';
}
function verificarEntrada(control)
{
if (control.value=='')
alert('Debe ingresar datos');
}
</script>
<form name="form1">
Ingrese su nombre:
<input type="text" name="nombre" onFocus="vaciar(this)"
onBlur="verificarEntrada(this)"><br>
Ingrese su edad:
<input type="text" name="edad" onFocus="vaciar(this)"
onBlur="verificarEntrada(this)"><br>
<input type="button" value="Confirmar">
</form>
</body>
</html>
A cada control de tipo TEXT le inicializamos los eventos onFocus y onBlur. Le indicamos, para el
evento onFocus la función vaciar, pasando como parámetro la palabra clave this que significa la
dirección del objeto que emitió el evento. En la función propiamente dicha, accedemos a la
propiedad value y borramos su contenido.
34
De forma similar, para el evento onBlur llamamos a la función verificarEntrada donde analizamos si
se ha ingresado algún valor dentro del control, en caso de tener un string vacío procedemos a
mostrar una ventana de alerta.
El evento onMouseOver se ejecuta cuando pasamos la flecha del mouse sobre un hipervínculo y el
evento onMouseOut cuando la flecha abandona el mismo.
Para probar estos eventos implementaremos una página que cambie el color de fondo del
documento.
Implementaremos una función que cambie el color con un valor que llegue como parámetro.
Cuando retiramos la flecha del mouse volvemos a pintar de blanco el fondo del documento:
<html>
<head></head>
<body>
<script language="JavaScript">
function pintar(col)
{
document.bgColor=col;
}
</script>
<a href="pagina1.html" onMouseOver="pintar('#ff0000')"
onMouseOut="pintar('#ffffff')">Rojo</a>
-
<a href="pagina1.html" onMouseOver="pintar('#00ff00')"
onMouseOut="pintar('#ffffff')">Verde</a>
-
<a href="pagina1.html" onMouseOver="pintar('#0000ff')"
onMouseOut="pintar('#ffffff')">Azul</a>
<br>
<br>
<br>
<a href="pagina2.html">ver segundo problema</a>
</body>
</html>
Las llamadas a las funciones las hacemos inicializando las propiedades onMouseOver y onMouseOut:
La función 'pintar' recibe el color e inicializa la propiedad bgColor del objeto document.
function pintar(col)
{
document.bgColor=col;
}
El segundo problema pinta de color el interior de una casilla de una tabla y lo regresa a su color
original cuando salimos de la misma:
<html>
<head></head>
<body>
<script language="JavaScript">
function pintar(objeto,col)
{
35
objeto.bgColor=col;
}
</script>
<table border="1">
<tr>
<td onMouseOver="pintar(this,'#ff0000')" onMouseOut="pintar(this,'#ffffff')">rojo</td>
<td onMouseOver="pintar(this,'#00ff00')" onMouseOut="pintar(this,'#ffffff')">verde</td>
<td onMouseOver="pintar(this,'#0000ff')" onMouseOut="pintar(this,'#ffffff')">azul</td>
</tr>
</table>
</body>
</html>
La lógica es bastante parecida a la del primer problema, pero en éste, le pasamos como parámetro
a la función, la referencia a la casilla que queremos que se coloree (this):
33-Evento onLoad
El evento onLoad se ejecuta cuando cargamos una página en el navegador. Uno de los usos más
frecuentes es para fijar el foco en algún control de un formulario, para que el operador no tenga
que activar con el mouse dicho control.
Este evento está asociado a la marca body.
La página completa es:
<html>
<head></head>
<body onLoad="activarPrimerControl()">
<script language="JavaScript">
function activarPrimerControl()
{
document.form1.nombre.focus();
}
</script>
<form name="form1">
Ingrese su nombre:
<input type="text" name="nombre"><br>
Ingrese su edad:
<input type="text" name="edad"><br>
<input type="button" value="Confirmar">
</form>
</body>
</html>
<body onLoad="activarPrimerControl()">
function activarPrimerControl()
{
document.form1.nombre.focus();
}
36
Al objeto window lo hemos estado usando constantemente. Representa la ventana del navegador.
window es un objeto global y tiene los siguienes métodos:
Es bueno hacer notar que a todas estas funciones las podemos llamar anteponiéndole el nombre del
objeto window, seguida del método o en forma resumida indicando solamente el nombre del
método (como lo hemos estado haciendo), esto es posible ya que el objeto window es el objeto de
máximo nivel.
Ej:
valor=window.prompt("Ingrese valor","");
o
valor=prompt("Ingrese valor","");
Para reducir la cantidad de caracteres que se tipean normalmente encontraremos los programas
tipeados de la segunda forma.
El siguiente programa muestra varios de los métodos disponibles del objeto window:
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function cerrar()
{
close(); // podemos escribir window.close();
}
function abrir()
{
var ventana=open();
ventana.document.write("Estoy escribiendo en la nueva ventana<br>");
ventana.document.write("Segunda linea");
}
function abrirParametros()
{
37
var ventana=open('','','status=yes,width=400,height=250,menubar=yes');
ventana.document.write("Esto es lo primero que aparece<br>");
}
function mostrarAlerta()
{
alert("Esta ventana de alerta ya la utilizamos en otros problemas.");
}
function confirmar()
{
var respuesta=confirm("Presione alguno de los dos botones");
if (respuesta==true)
alert("presionó aceptar");
else
alert("presionó cancelar");
}
function cargarCadena()
{
var cad=prompt("cargue una cadena:","");
alert("Usted ingreso "+cad);
}
</SCRIPT>
</HEAD>
<BODY>
Este programa permite analizar la llamada a distintas responsabilidades del
objeto window.<br>
<FORM>
<input type="button" value="close()" onClick="cerrar()">
<br><br>
<input type="button" value="open()" onClick="abrir()">
<br><br>
<input type="button" value="open con parámetros"
onClick="abrirParametros()" >
<br><br>
<input type="button" value="alert" onClick="mostrarAlerta()">
<br><br>
<input type="button" value="confirm" onClick="confirmar()">
<br><br>
<input type="button" value="prompt" onClick="cargarCadena()">
</FORM>
</BODY>
</HTML>
38
Cuando le asignamos una nueva dirección a la propiedad location del objeto window, el navegador
redirecciona a dicha página.
Implementaremos un pequeño ejemplo para ver la utilidad de esta propiedad: Supongamos que
tenemos un hipervínculo que al ser presionado muestre una vetana de confirmación, si queremos
ingresar a un sitio para mayores. En caso que el visitante presione el botón afirmativo,
redireccionamos a otra página, en caso contrario mostramos un mensaje:
<html>
<head>
</head>
<body>
<script language="javascript">
function verificarMayorEdad()
{
if (window.confirm('Es mayor de edad?'))
window.location='pagina2.html';
else
window.alert('Cuando sea mayor de edad podrá ingresar');
}
</script>
<a href="javascript:verificarMayorEdad()">Ingresar al sitio para
mayores</a>
</body>
</html>
Lo primero que tenemos que indicar es que para llamar a una función de javascript desde un
hipervínculo debemos anteceder la palabra javascript seguida de dos puntos y por último, el
nombre de la función:
<a href="javascript:verificarMayorEdad()">
La función verificarMayorEdad muestra la ventana con los botones confirmar y cancelar (recordar
que el método confirm del objeto window hace esto en forma automática).
39
Si se presiona el botón confirmar, la función confirm retorna true y por lo tanto se ejecuta el
verdadero del if:
<html>
<head>
<title>Problema</title>
</head>
<body>
Bienvenido al sitio para adultos.
</body>
</html>
El objeto history almacena todas las páginas que visitamos. Luego, con una serie de funciones,
podemos extraer de la memoria de la computadora las páginas ya visitadas, sin tener que pedirlas
nuevamente al servidor.
Cuenta con las siguientes funciones:
40
Llamar a la función back, tiene el mismo comportamiento que presionar el botón "Atrás" del
navegador.
El siguiente ejemplo nos permite cargar una segunda página y luego retroceder a la primera página
sin tener que solicitarla nuevamente al servidor:
<html>
<head>
<title>Problema</title>
<script language="javascript">
function avanzar()
{
window.history.go(1);
}
</script>
</head>
<body>
<a href="pagina2.html">Ir a la página 2</a>
<br>
<br>
<a href="javascript:avanzar()">Extraer del cache la segunda página</a>
</body>
</html>
En esta primera página, la primera vez, debemos cargar la segunda página seleccionando el
hipervínculo pagina2.
La segunda página:
<html>
<head>
<title>Problema</title>
<script languge="javascript">
function retornar()
{
window.history.go(-1);
}
</script>
</head>
<body>
<a href="javascript:retornar()">Retornar</a>
</body>
</html>
if (window.history.length>0)
window.history.go(1);
else
alert('no hay otra página en la cache hacia adelante');
41
El objeto screen ofrece información acerca del monitor donde se está ejecutando el navegador.
La propiedades principales del objeto screen son:
El siguiente programa muestra el valor almacenado en las cinco propiedades que tiene el objeto
screen:
<html>
<head>
<title>Problema</title>
</head>
<body>
<script language="javascript">
document.write('Valores de las propiedades del objeto screen:<br>');
document.write('availHeight :' + screen.availHeight + '<br>');
document.write('availWidth :' + screen.availWidth + '<br>');
document.write('height :' + screen.height + '<br>');
document.write('width :' + screen.width + '<br>');
document.write('colorDepth :' + screen.colorDepth);
</script>
</body>
</html>
No olvidar que el objeto screen es una propiedad del objeto window, por lo que haber dispuesto la sintaxis:
window.screen.width etc. es la forma más completa, pero más tediosa de escribir (recordar que el objeto
window es el principal y lo podemos obviar cuando accedemos a sus propiedades o métodos).
38-Propiedad navigator del objeto window
42
Contiene información sobre el navegador web. La implementación de este objeto varía entre
navegadores (IExplorer, FireFox, Opera, etc.)
Las propiedades comunes a estos navegadores son:
Este pequeño programa muestra los valores de las propiedades antes anunciadas:
<html>
<head>
<title>Problema</title>
</head>
<body>
<script language="javascript">
document.write('Valores de las propiedades del objeto navigator:<br>');
document.write('appName :' + navigator.appName + '<br>');
document.write('appVersion :' + navigator.appVersion + '<br>');
document.write('cookieEnabled :' + navigator.cookieEnabled + '<br>');
document.write('plugins :' + navigator.plugins.length + '<br>');
</script>
</body>
</html>
function retornarFecha()
{
var fecha
fecha=new Date();
var cadena=fecha.getDate()+'/'+(fecha.getMonth()+1)+'/'+fecha.getYear();
return cadena;
}
function retornarHora()
{
var fecha
fecha=new Date();
var cadena=fecha.getHours()+':'+fecha.getMinutes()+':'+fecha.getSeconds();
return cadena;
}
2 - Creamos un archivo html que utilizará las funciones contenidas en el archivo *.js:
<html>
<head>
43
<title>Problema</title>
<script language="javascript" type="text/javascript" src="pagina2.js"></script>
</head>
<body>
<script language="javascript">
document.write('La fecha de hoy es:'+retornarFecha());
document.write('<br>');
document.write('La hora es:'+retornarHora());
</script>
</body>
</html>
El lenguaje JavaScript no es un lenguaje orientado a objetos completo, pero permite definir clases
con sus atributos y responsabilidades. Finalmente nos permite definir objetos de estas clases.
Pero el otro pilar de la programación orientada a objetos, es decir la herencia, no está
implementada en el lenguaje.
Veremos la sintaxis para la declaración de una clase y la posterior definición de objetos de la
misma.
nombre
saldo
function cliente(nombre,saldo)
{
this.nombre=nombre;
this.saldo=saldo;
this.depositar=depositar;
this.extraer=extraer;
}
function depositar(dinero)
{
this.saldo=this.saldo+dinero;
}
44
function extraer(dinero)
{
this.saldo=this.saldo-dinero;
}
El nombre de la clase coincide con el nombre de la función principal que implementamos (también
llamado constructor de la clase):
function cliente(nombre,saldo)
{
this.nombre=nombre;
this.saldo=saldo;
this.depositar=depositar;
this.extraer=extraer;
}
A esta función llegan como parámetro los valores con que queremos inicializar los atributos. Con la
palabra clave 'this' diferenciamos los atributos de los parámetros (los atributos deben llevar la
palabra clave this)
this.nombre=nombre;
this.saldo=saldo;
También en el constructor inicializamos la referencia a todos los métodos que contendrá la clase:
this.depositar=depositar;
this.extraer=extraer;
function depositar(dinero)
{
this.saldo=this.saldo+dinero;
}
function extraer(dinero)
{
this.saldo=this.saldo-dinero;
}
De nuevo recordemos que diferenciamos los atributos de la clase por la palabra clave this.
Ahora veamos el archivo HTML que incorpora el archivo JS y define un objeto de la clase planteada:
<html>
<head>
<title>Problema</title>
<script language="javascript" src="pagina2.js" type="text/javascript">
</script>
</head>
<body>
<script language="javascript">
var cliente1;
cliente1=new cliente('diego',1200);
document.write('Nombre del cliente:'+cliente1.nombre+'<br>');
document.write('Saldo actual:'+cliente1.saldo+'<br>');
cliente1.depositar(120);
45
document.write('Saldo luego de depositar $120---->'+cliente1.saldo+'<br>');
cliente1.extraer(1000);
document.write('Saldo luego de extraer $1000---->'+cliente1.saldo+'<br>');
</script>
</body>
</html>
Recordemos que lo primero que hacemos, según lo visto en conceptos anteriores, es importar el
archivo *.js:
var cliente1;
cliente1=new cliente('diego',1200);
Similar a conceptos anteriores cuando definiamos objetos de la clase Date o Array. Con el operador
new se crea un objeto de la clase cliente y se llama inmediatamente el constructor de la clase. El
constructor retorna una referencia del objeto que se almacena en la variable cliente1.
De ahí en más podemos acceder a los atributos y llamar a los métodos del objeto cliente1 de la
clase cliente:
Podemos decir que la ventaja que podemos obtener con el planteo de clases es hacer nuestros
programas mucho más organizados, entendibles y fundamentalmente, poder reutilizar clases en
distintos proyectos.
function cargarnumero()
{
this.numero=prompt("Que número de quiniela quiere?","");
}
46
function verificarsigano(num)
{
if (this.numero==num)
return true;
else
return false;
}
//clase bolillero ************************************************
function bolillero()
{
this.numero=-1;
}
function sortear()
{
this.numero=Math.random()*11;
}
<html>
<head>
<title>Problema</title>
<script language="javascript" src="pagina2.js" type="text/javascript">
</script>
</head>
<body>
<script language="javascript">
var numeroquiniela1;
numeroquiniela1=new numeroquiniela("juan");
numeroquiniela1.cargarnumero();
var numeroquiniela2;
numeroquiniela2=new numeroquiniela("ana");
numeroquiniela2.cargarnumero();
var bolillero;
bolillero=new bolillero();
bolillero.sortear();
document.write('Numero sorteado:' + bolillero.numero + '<br>');
document.write(numeroquiniela1.nombre + ' eligió ' + numeroquiniela1.numero
+'<br>');
document.write(numeroquiniela2.nombre + ' eligió ' + numeroquiniela2.numero
+'<br>');
if (numeroquiniela1.numero==bolillero.numero)
document.write(numeroquiniela1.nombre + ' a ganado <br>');
if (numeroquiniela2.numero==bolillero.numero)
document.write(numeroquiniela2.nombre + ' a ganado <br>');
</script>
</body>
</html>
47
function hipervinculo(direccion,titulo)
{
this.direccion=direccion;
this.titulo=titulo;
this.retornarhipervinculo=retornarhipervinculo;
}
function retornarhipervinculo()
{
var cadena;
cadena='<a href=' + this.direccion + '>' + this.titulo + '</a>';
return cadena;
}
<html>
<head>
<title>Problema</title>
<script language="javascript" src="pagina2.js" type="text/javascript"></script>
</head>
<body>
<script language="javascript">
var vector=new Array();
vector[0]=new hipervinculo('http://www.google.com','google');
vector[1]=new hipervinculo('http://www.msn.com','msn');
vector[2]=new hipervinculo('http://www.yahoo.com','yahoo');
for(f=0;f<vector.length;f++)
{
document.write(vector[f].retornarhipervinculo());
document.write('<br>');
}
</script>
</body>
</html>
Creamos un objeto de la clase Array y luego guardamos en cada componente un objeto de la clase
hipervínculo (pasándole como parámetros al constructor, la dirección del sitio y el texto a mostrar
en la página. Luego recorremos con un 'for' las componentes del vector e imprimimos en la página
cada hipervínculo.
48