Javier de Lucas

Capítulo 1: Introducción a JavaScript

1. ¿Qué es JavaScript?

JavaScript es un lenguaje de scripts desarrollado por Netscape para incrementar las funcionalidades del lenguaje HTML. Sus características más importantes son:

  • JavaScript es un lenguaje interpretado, es decir, no require compilación. El navegador del usuario se encarga de interpretar las sentencias JavaScript contenidas en una página HTML y ejecutarlas adecuadamente.
  • JavaScript es un lenguaje orientado a eventos. Cuando un usuario pincha sobre un enlace o mueve el puntero sobre una imagen se produce un evento. Mediante JavaScript se pueden desarrollar scripts que ejecuten acciones en respuesta a estos eventos.
  • JavaScript es un lenguaje orientado a objetos. El modelo de objetos de JavaScript está reducido y simplificado, pero incluye los elementos necesarios para que los scripts puedan acceder a la información de una página y puedan actuar sobre la interfaz del navegador.

 2. El problema de las versiones

JavaScript fue desarrollado por Netscape, y la primera versión, la 1.0, fue introducida por primera vez en su navegador Netscape Navigator 2.0. JavaScript 1.1 representó una mejora en las características del lenguaje, y se incluyó en el Navigator 3.0.

Microsoft intentó dar soporte a la primera versión de JavaScript en el Internet Explorer 3.0 (con el nombre de Jscript). Sin embargo,  Jscript resultó poco fiable y estaba plagado de bugs.

ECMA impulsó un estándar para JavaScript, que Microsoft introdujo en el Internet Explorer 4.0. Este estándar comparte la mayoría de las características con JavaScript 1.2, la nueva versión que apareció con el Netscape Navigator 4.0. Sin embargo, no son totalmente equivalentes, lo que dificulta la creación de scripts que funcionen correctamente en los dos navegadores.

Las últimas versiones del Navigator (a partir de la 4.06) implementan ya JavaScript 1.3, que es totalmente compatible con ECMA-262.

3. ¿Cómo introducir JavaScript en el código HTML?

Básicamente existen dos formas de introducir un script de JavaScript en una página HTML:

  • Embebido en el código HTML, entre las tags <script> y </script>. El siguiente código muestra un ejemplo de código JavaScript embebido en el HTML de una página. Como se observa, el código JavaScript figura entre las marcas de comentario <!-- y -->, para que no aparezca en la página. Además, delante de la marca de cierre de comentario se insertan los caracteres //, de comentario en JavaScript, para que el intérprete JavaScript no dé error por la línea -->.
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>Introducción a JavaScript</TITLE> <SCRIPT LANGUAGE="JavaScript">
<!--
function saludo() {
window.alert('Bienvenido a JavaScript')
}
//-->
</SCRIPT>
</HEAD>
<BODY onLoad="saludo()">
  • Como archivo .js que se carga con la página HTML. Para ello, debe indicarse en las tags anteriores el nombre y ubicación del archivo .js que contiene el script JavaScript, como en este ejemplo:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>Tutorial de JavaScript</TITLE>
<SCRIPT LANGUAGE="JavaScript" SRC="scripts/fuente.js"></SCRIPT>
</HEAD> 

 

 

Capítulo 2: Fundamentos de JavaScript

1. Introducción de código JavaScript en las páginas

Para introducir código JavaScript en una página HTML:

<SCRIPT LANGUAGE="JavaScript">
<!--
Programa JavaScript
//-->
</SCRIPT>

Las líneas 2 y 4 se introducen para evitar que se generen errores en navegadores que no soporten JavaScript y para que estos navegadores no muestren el código del script en la página.

 2. Comentarios en JavaScript

Los comentarios se utilizan en todos los lenguajes de programación para añadir explicaciones al código. Cuando el intérprete de comandos (o compilador, según el caso) encuentra estas líneas, las ignora. En JavaScript se utiliza el formato de comentarios propio de C/C++. Así, si es para comentar una línea:

// comentario de una línea

Si el comentario ocupa varias líneas, se usan los carácteres /* (inicio de comentario) y */ (fin de comentario):

/* comentario de varias
líneas */

Los bloques de código que integran una unidad son encerrados entre los caracteres { y }. Por otra parte, JavaScript es sensible a mayúsculas y minúsculas.

 3. Inclusión de ficheros externos con código JavaScript

Los scripts que queramos utilizar en una página suelen escribirse en la misma página, normalmente entre las etiquetas <head> y </head>. Determinados scripts pueden aparecer entre las etiquetas <body> y </body> (por ejemplo, gestores de eventos, o scripts que escriben código on-line), pero lo normal es que la mayoría de las funciones estén en la cabecera de la página.

Otra posibilidad es la inclusión del código JavaScript en ficheros externos, de extensión .js. Estos ficheros son enlazados desde la página HTML donde se utilizan con este código (que deberá ir también entre <head> y </head>):

<SCRIPT LANGUAGE="JavaScript" SRC="fichero.js"></SCRIPT>

Este código es ignorado automáticamente por los navegadores que no soportan JavaScript.

 4. Escritura de cadenas de texto en la página

Para escribir la cadena Texto en la página HTML:

document.write("Texto")

Para escribir la cadena Texto en la página HTML más un retorno de carro:

document.writeln("Texto")

Caracteres especiales a utilizar en cadenas de texto:

Caracter Significado
\n Nueva línea
\t Tabulador
\r Retorno de carro
\f Alimentación de formulario
\b Retroceso de un espacio

Ejemplo:

<HTML>
<HEAD>
<TITLE>Ejemplo 2.1: escritura de cadenas de texto</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
document.write('<IMG SRC="imagen.gif">')
document.write("<BR><H1>Bienvenido a JavaScript</H1>")
//-->
</SCRIPT>
</BODY>
</HTML>

Como el nombre de la imagen lleva comillas dobles, el texto pasado al método write lleva comillas simples.

 5. Cuadros de diálogo

La manera más sencilla consiste en utilizar el método alert() del objeto window:

alert("Texto")

Por ejemplo:

alert("¡Bienvenido!\n\n\tEsta Web está dedicada a JavaScript.")

Este tipo de ventanas de diálogo muestra un botón Aceptar que el usuario deberá pulsar para continuar. Para ver el resultado del ejemplo anterior, pulsa sobre el siguiente botón:

Existen otros tipos de ventanas de diálogo que interactúan con el usuario. El método prompt() del objeto window muestra una caja de texto en la que el usuario puede introducir contenidos. También muestra dos botones, Aceptar y Cancelar. Ejemplo:

prompt("Su color favorito es: ","Azul")

Para verlo en acción pulsa sobre este botón:

El segundo parámetro es el valor predeterminado para la caja de texto, que el usuario podrá modificar. Este cuadro de diálogo permite capturar datos introducidos por el usuario y realizar una acción en base a ellos. Por ejemplo, podemos pedirle al usuario que introduzca su nombre, y despues mostrarlo:

<HTML>
<HEAD>
<TITLE>Ejemplo 2.2: página que pide el nombre</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var nombre = prompt("Introduzca su nombre:","")
document.write("<H2>Bienvendio, " + nombre + "</H2>")
//-->
</SCRIPT>
<P>Aquí va el resto de la página...</P>
</BODY>
</HTML>

Si analizamos el ejemplo anterior, vemos que se ha definido una variable cuyo identificador es nombre. El concepto de variable y cómo se definen se explica más detalladamente en el Capítulo 3: Trabajando con datos e información.

Finalmente, para pedir al usuario confirmación en la realización de una acción podemos usar el método confirm() del objeto window. Este método mostrará un cuadro de diálogo con el mensaje de texto que le pasemos como parámetro, y dos botones, Aceptar y Cancelar:

confirm("¿Desea volver al inicio de la página?")

Este método devuelve verdadero (true) si se pulsa Aceptar y falso (false) si se pulsa Cancelar. Podemos ver un ejemplo de este cuadro de diálogo:

Veamos ahora un ejemplo completo que utiliza este cuadro de diálogo:

<HTML>
<HEAD>
<TITLE>Ejemplo 2.3: página que pide confirmación</TITLE>
</HEAD>
<BODY>
<H1>Página sobre sellos</H1>
<SCRIPT LANGUAGE="JavaScript">
<!--
var entrar = confirm("¿De verdad desea entrar en esta pagina?")
if ( !entrar ) self.close()
//-->
</SCRIPT>
<P>Aquí va el resto de la página...</P>
</BODY>
</HTML>

Este ejemplo pide confirmación para cargar el resto de la página. Si se elige la opción Cancelar, se cierra la ventana (el navegador mostrará un cuadro de diálogo de confirmación). Si se pulsa Aceptar, se muestra el resto de la página. La sentencia if ( ... ) que aparece se explica en el Capítulo 3: Trabajando con datos e información.  

 

 

 

Capítulo 3: Trabajando con datos e información

1. Tipos de datos

Los scripts que utilicemos en nuestras páginas HTML manejarán datos y valores para producir resultados. En todo lenguaje de programación existen unos tipos estándar que definen el rango de valores que puede tomar cada dato. Así, un dato del tipo numérico tomará valores numéricos, y no podrá ser una cadena de texto.

En JavaScript un dato puede ser de uno de los siguientes tipos:

Tipo Ejemplo
Número Cualquier número, como 12, 22.5 o 2e8
Cadena "Hola" u 'Hola'
Booleano Verdadero (true) o falso (false)
Objeto Ver Capítulo 4: Funciones y objetos
Función
NULL Palabra clave para indicar ningún valor


Los números enteros pueden encontrarse en diferentes bases:

  • Decimal (base 10): cualquier entero que no empiece por 0 estará representado en base 10.
  • Octal (base 8): si el entero se escribe empezando con el dígito 0, estará en base 8.
  • Hexadecimal (base 16): para indicar número en hexadecimal, hay que anteponerlo con 0x o 0X (por ejemplo 0x1A).

En JavaScript, la cadena vacía "" es diferente de null.

2. Declaración de variables

Los datos que maneja nuestro programa se almacenan en variables. El concepto de variable debe verse como un contenedor de información.

var nombre_variable
nombre_variable = "valor"

La primera línea es la declaración de la variable. La siguiente línea le asigna un valor. Por ejemplo, si queremos guardar el resultado de una suma, podemos definir una variable de nombre resultado y asignarle el valor de la suma.

var resultado
resultado = 10 + 10

La variable resultado contiene ahora el valor 20. Para referirnos a ella, utilizamos su nombre. Como se observa, en JavaScript no es necesario indicar de qué tipo es una variable en el memento de su definición. El tipo del dato queda definido en el momento en que se asigna un valor a la variable.

Por otra parte, podemos realizar la asignación del valor de la variable en el momento de su declaración, del siguiente modo:

var resultado = 10 + 10

Aunque en JavaScript no es estrictamente necesario declarar una variable antes de utilizarla, la declaración mediante el uso de la palabra reservada var es siempre recomendable, por claridad.

El nombre de una variable puede empezar por una letra o por el carácter _. Después ya pueden ponerse números. Los nombres de variables son sensibles a mayúsculas y minúsculas.

Ejemplo:

<HTML>
<HEAD><TITLE>Ejemplo 3.1: uso de una variable</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
var name = prompt("Introduce tu nombre:","Nombre")
//-->
</SCRIPT></HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
document.write('<IMG SRC="welcome.gif">')
document.write("<H1>Hola " + name + ". ¡Bienvenido a mi página!</H1>")
//-->
</SCRIPT></BODY></HTML>

En este ejemplo se ha utilizado la variable nombre para guardar el nombre del usuario, de forma similar a como se hace en el ejemplo 2.2 del capítulo anterior.

3. Operadores aritméticos

En todo lenguaje de programación existen un conjunto de operadores que permiten realizar operaciones con los datos. Nos referimos a operaciones aritméticas, comparaciones, operaciones lógicas y otras operaciones (por ejemplo, concatenación de cadenas, búsqueda de patrones, etc.).

En JavaScript existen los siguientes operadores aritméticos:

3.1. Binarios

Operador Descripción
= Asigna el valor del operando de la izquierda al operando de la derecha
+= Suma el operando de la izquierda al de la derecha y asigna el resultado al operando de la derecha
-= Resta al operando de la izquierda el de la derecha y asigna el valor al operando de la derecha
*= Multiplica el operando de la derecha por el de la izquierda y asigna el valor al operando de la derecha
/= Divide el operando de la izquierda por el de la derecha y asigna el valor al operando de la derecha
%= Divide el operando de la izquierda por el de la derecha y asigna el valor del resto de la división al operando de la derecha

 3.-2. Unarios

Operador Descripción
++x Incrementa x en una unidad y devuelve el valor
x++ Ddevuelve el valor de x y lo deja incrementado en una unidad
-x Devuelve x negado

4. Operadores lógicos

Los operadores lógicos son los operadores del álgebra de Bull o booleanos.

Operador Descripción
&& Y lógico (devuelve verdadero si los dos operandos son verdaderos, y falso en caso contrario)
|| O lógico (devuelve verdadero si uno de los dos operandos o ambos son verdaderos, y falso en caso contrario)
! No lógico (devuelve verdadero si el operando es falso, y falso si es verdadero)

 5. Operadores de comparación

Los operadores de comparación devuelven siempre verdadero (true) o falso (false). Este tipo de operadores se utilizan con gran frecuencia en todos los lenguajes de programación, para realizar una acción u otra en función de que cierta condición sea verdadera o falsa.

Operador Descripción
== Devuelve verdadero si los dos operandos son iguales
!= Devuelve verdadero si los dos operadores son distintos
> Devuelve verdadero si el primer operando es mayor que el segundo
< Devuelve verdadero si el primer operando es menor que el segundo
>= Devuelve verdadero si el primer operando es mayor o igual que el segundo
<= Devuelve verdadero si el primer operando es menor o igual que el segundo

 6. Operadores condicionales

El operador ? es un operador especial en JavaScript (heredado de C++). Veamos un ejemplo:

(condicion) ? valor1 : valor2

Si la condición es verdadera, la expresión toma el valor 1 y si es falsa el valor 2. Por ejemplo:

(dia=="Domingo") ? "Festivo" : "Laborable"

Ejemplo:

<HTML>
<HEAD><TITLE>Ejemplo operadores</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
var pregunta = "¿Cuánto vale 10 + 10?"
var respuesta_correcta = 20
var correcto = "<p>¡CORRECTO!</p>"
var incorrecto = "<p>INCORRECTO</p>"
//realiza la pregunta
var respuesta_dada = prompt(pregunta, "0")
//comprueba la respuesta
var salida = (respuesta_dada == respuesta_correcta) ? correcto : incorrecto
//-->
</SCRIPT></HEAD>
<BODY><SCRIPT LANGUAGE="JavaScript">
<!--
//escribe la salida
document.write(salida)
//-->
</SCRIPT></BODY></HTML>

 7. Comparaciones: sentencia if ... else

Las comparaciones se realizan utilizando la sentencia if ... else. Su sintaxis es la siguiente:

if (condicion)
    sentencia unica
 
if (condicion) {
    varias sentencias
}
 
if (condicion) {
    varias sentencias
} else {
    varias sentencias2
}

Las sentencias if ... else pueden anidarse.

En el siguiente
script podemos ver un ejemplo de sentencia if ... else.

<HTML>
<HEAD><TITLE>Ejemplo sentencia if ... else</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
//definicion de variables
var pregunta = "¿Cuánto vale 10 + 10?"
var respuesta_correcta = 20
var correcto = "<p>¡Correcto!</p>"
var incorrecto = "<p>¡Incorrecto!</p>"
//realiza la pregunta
var respuesta_dada = prompt(pregunta, "0");
//comprueba la respuesta
if (respuesta_dada != respuesta_correcta) {
    //respuesta incorrecta, segunda oportunidad
    if ( confirm("¡No! Pulsa OK para reintentarlo."))
        respuesta_dada = prompt(pregunta, "0")
}
//comprueba la respuesta
var salida = (respuesta_dada == respuesta_correcta) ? correcto : incorrecto
//-->
</SCRIPT></HEAD>
<BODY><SCRIPT LANGUAGE="JavaScript">
<!--
//escribe la salida
document.write(salida)
//-->
</SCRIPT></BODY></HTML>

 

 

 

Capítulo 4: Funciones y objetos

1. Definición de una función

function nombre_funcion(argumentos) {
    bloque de comandos
}

El nombre de la función es sensible a mayúsculas y minúsculas. Puede incluir el caracter "_" y empezar con una letra.

Ejemplo:

function ImprimeNombre(nombre) {
    document.write("<HR>Tu nombre es <B><I>")
    document.write(nombre)
    document.write("</B></I><HR>")
}

La variable nombre sólo existe dentro de la función y lo mismo pasa para cualquier variable declarada dentro de la función.

Las funciones pueden devolver un valor. Para ello:

function cubo(numero) {
    var cubo = numero * numero * numero
    return cubo
}

También podría haber sido

return numero * numero * numero

La función eval() evalúa un string devolviendo un valor numérico. Por ejemplo, eval("10*10") devolverá el valor 100.

Ejemplo:

<HTML>
<HEAD><TITLE>Preguntador</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
//DEFINICION DE LA FUNCION HazPregunta()
function HazPregunta(pregunta) {
    //VARIABLES LOCALES
    var solucion = eval(pregunta)
    var salida = "Que da " + pregunta + "?"
    var correcto='<IMG SRC="correcto.gif">'
    var incorrecto='<IMG SRC="incorrecto.gif">'
    //REALIZA LA PREGUNTA
    var respuesta = prompt(salida,"0")
    //COMPRUEBA EL RESULTADO
    return (respuesta == solucion) ? correcto : incorrecto
}
//-->
</SCRIPT></HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
//EJECTUA LA FUNCION HazPregunta
var resultado = HazPregunta("10 + 10")
document.write(resultado)
//-->
</SCRIPT>
</BODY></HTML>

 2. Funciones recursivas

Son las que se llaman a sí mismas. Un ejemplo típico es el de la función que calcula el factorial de un número:

function factorial(numero) {
    if (numero > 1) {
        return numero * factorial(numero - 1)
    } else {
        return numero
    }
}

Esta función se basa en que el factorial de un número x es igual x multiplicado por el factorial de x - 1:

x! = x * (x - 1)!

Veamos una modificación del ejemplo anterior en la que la función HazPregunta es recursiva:

<HTML>
<HEAD><TITLE>Preguntador</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
//DEFINICION DE LA FUNCION HazPregunta()
function HazPregunta(pregunta) {
    //VARIABLES LOCALES
    var solucion = eval(pregunta)
    var salida = "Que da " + pregunta + "?"
    var correcto='<IMG SRC="correcto.gif">'
    var incorrecto='<IMG SRC="incorrecto.gif">'
    //REALIZA LA PREGUNTA
    var respuesta = prompt(salida,"0")
    //COMPRUEBA EL RESULTADO
    return (respuesta == solucion) ? correcto : HazPregunta(pregunta)
}
//-->
</SCRIPT></HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
//EJECTUA LA FUNCION HazPregunta
var resultado = HazPregunta("10 + 10")
document.write(resultado)
//-->
</SCRIPT>
</BODY></HTML>

Esta función puede crear problemas de memoria si el usuario nunca da la respuesta correcta. Una posible forma de evitar esto consiste en introducir un contador del número respuestas dadas por el usuario y compararlo con el número de oportunidades que tiene para responder a la pregunta.

3. Creación de objetos

Para crear objetos, primero es necesario definir su tipo (o clase):

function empleado(nombre, edad, puesto) {
    this.nombre = nombre
    this.edad = edad
    this.puesto = puesto
}

En JavaScript, la partícula this se refiere al objeto en el que se utiliza. Una vez definida la clase, podemos crear variables (instanciar objetos) de esa clase de la siguiente manera:

empleado_1 = new empleado("Pedro", 26, "Programador")

Pueden añadirse propiedades a los objetos aunque estas no haya sido declaradas en la definición de la clase. Por ejemplo:

empleado_1.jefe = "Luis"

Estas propiedades nuevas sólo afectaran a ese objeto y no al resto.

Los objetos pueden anidarse de forma que un objeto sea un a propiedad de otro objeto. Por ejemplo:

function oficina(ciudad, pais) {
    this.ciudad = ciudad
    this.pais = pais
}
oficinaPedro = new oficina("Madrid","España")
empleado_1 = new empleado("Pedro", 26, "Programador", oficinaPedro)

En el ejemplo anterior, hay que definir la clase empleado de esta forma:

function empleado(nombre, edad, puesto, oficina)
    this.nombre = nombre
    this.edad = edad
    this.puesto = puesto
    this.oficina = oficina
}

Dentro de la definición de la clase o tipo del objeto, pueden incluirse funciones que accedan a sus propiedades. Estas funciones reciben el nombre de métodos. Un método se define de la siguiente manera:

function mostrarPerfil() {
    document.write("Nombre: " + this.nombre + "<BR>")
    document.write("Edad: " + this.edad + "<BR>")
    document.write("Puesto: " + this.puesto + "<BR>")
}

function empleado(nombre, edad, puesto) {
this.nombre = nombre
this.edad = edad
this.puesto = puesto
this.mostrarPerfil = mostrarPerfil
}

Así pueden mostrarse las propiedades del objeto empleado invocando el método asociado:

empleado_1.mostrarPerfil

Ejemplo final:

<HTML><HEAD><TITLE>Empleados</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
//DEFINE EL METODO muostrarPerfil
function mostrarPerfil() {
    document.write("<H1>Perfil del empleado " + this.nombre + "</H1><HR><PRE>")
    document.writeln("Edad: " + this.edad)
    document.writeln("Puesto: " + this.puesto)
    document.write("</PRE>")
}
//DEFINE EL OBJECTO EMPLEADO
function empleado() {
    this.nonmbre = prompt("Introduzca el nombre del empleado: ", "Nombre")
    this.edad = prompt("Introduzca la edad de " + this.nombre, "00")
    this.mostrarPerfil = mostrarPerfil
}
nuevoEmpleado = new empleado()
//-->
</SCRIPT>
</HEAD><BODY><SCRIPT LANGUAGE="JavaScript">
<!--
nuevoEmpleado.mostrarPerfil()
//-->
</SCRIPT>
</BODY></HTML>

4. Arrays asociativos

En JavaScript las propiedades de un objeto y los arrays están relacionados de la siguiente manera:

empleado_1[0] = "Pedro"
empleado_1[1] = 26
empleado_1[2] = "Programador"

Y también se produce la siguiente equivalencia:

empleado_2["nombre"] equivale a empleado_2[0] empleado_2["edad"] equivale a empleado_2[1]

Vamos a ver un ejemplo para la creación de un menú de usuario:

<HTML><HEAD><TITLE>Menu de usuario</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
//DEFINE METODO PARA VER LA INFORMACION
function verInfo() {
    document.write("<H1>Perfil del empleado: " + this.nombre + "</H1><HR><PRE>")
    document.writeln("Numero de empleado: " + this.numero)
    document.writeln("Edad: " + this.edad)
    document.writeln("Puesto: " + this.puesto)
    document.write("</PRE>")
}
//DEFINE METODO PARA OBTENER LA INFORMACION
function obtenerInfo() {
    var menu = "1. Salir/n2. Nombre/n3. Edad/n4. Puesto"
    var eleccion = prompt(menu, "0")
if (eleccion != null) {
    if ((eleccion < 0) || (eleccion > 4)) {
        alert ("Eleccion incorrecta.")
        this.obtenerInfo()
    } else {
        if (eleccion != "0") {
            this[eleccion - 1] = prompt("Introduzca informacion","")
            this.obtenerInfo()
        }
    }
}
//DEFINE OBJETO
function empleado() {
    this.nombre = ""
    this.edad = 0
    this.puesto = 0
    this.verInfo = verInfo
    this.obtenerInfo = obtenerInfo
}
empleadoNuevo = new empleado()
//-->
</SCRIPT></HEAD>
<BODY><SCRIPT LANGUAGE="JavaScript">
<!--
empleadoNuevo.obtenerInfo()
empleadoNuevo.verInfo()
//-->
</SCRIPT>
</BODY></HTML> 

 

 

 

Capítulo 5: Eventos en JavaScript

1. Eventos en JavaScript

En JavaScript, la interacción con el usuario se consigue mediante la captura de los eventos que éste produce. Un evento es una acción del usuario ante la cual puede realizarse algún proceso (por ejemplo, el cambio del valor de un formulario, o la pulsación de un enlace).

Los eventos se capturan mediante los manejadores de eventos. El proceso a realizar se programa mediante funciones JavaScript llamadas por los manejadores de eventos.

La siguiente tabla muestra los manejadores de eventos que pueden utilizarse en JavaScript, la versión a partir de la cual están soportados y su significado.

Manejador Versión Se produce cuando...
onAbort 1.1 El usuario interrumpe la carga de una imagen
onBlur 1.0 Un elemento de formulario, una ventana o un marco pierden el foco
onChange 1.0 (1.1 para FileUpload) El valor de un campo de formulario cambia
onClick 1.0 Se hace click en un objeto o formulario
onDblClick 1.2 (no en Mac) Se hace click doble en un objeto o formulario
onDragDrop 1.2 El usuario arrastra y suelta un objeto en la ventana
onError 1.1 La carga de un documento o imagen produce un error
onFocus 1.1 (1.2 para Layer) Una ventana, marco o elemento de formulario recibe el foco
onKeyDown 1.2 El usuario pulsa una tecla
onKeyPress 1.2 El usuario mantiene pulsada una tecla
onKeyUp 1.2 El usuario libera una tecla
onLoad 1.0 (1.1 para image) El navegador termina la carga de una ventana
onMouseDown 1.2 El usuario pulsa un botón del ratón
onMouseMove 1.2 El usuario mueve el puntero
onMouseOut 1.1 El puntero abando una área o enlace
onMouseOver 1.0 (1.1 para area) El puntero entra en una área o imagen
onMouseUp 1.2 El usuario libera un botón del ratón
onMove 1.2 Se mueve una ventana o un marco
onReset 1.1 El usuario limpia un formulario
onResize 1.2 Se cambia el tamaño de una ventana o marco
onSelect 1.0 Se selecciona el texto del campo texto o área de texto de un formulario
onSubmit 1.0 El usuario envía un formulario
onUnload 1.0 El usuario abandona una página

 Ejemplo de evento:

<INPUT TYPE="text" onChange="CompruebaCampo(this)">

En este ejemplo, CompruebaCampo() es una función JavaScript definida en alguna parte del documento HTML (habitualmente en la cabecera del mismo). El identificador this es una palabra propia del lenguaje, y se refiere al objeto desde el cual se efectua la llamada a la función (en este caso, el campo del formulario).

La siguiente tabla muestra los eventos que pueden utilizarse con los objetos del modelo de objetos JavaScript del Navigator.

Manejador de evento Objetos para los que está definido
onAbort Image
onBlur Button, Checkbox, FileUpload, Layer, Password, Radio, Reset, Select, Submit, Text, Textarea, window
onChange FileUpload, Select, Text, Textarea
onClick Button, document, Checkbox, Link, Radio, Reset, Submit
onDblClick document, Link
onDragDrop window
onError Image, window
onFocus Button, Checkbox, FileUpload, Layer, Password, Radio, Reset, Select, Submit, Text, Textarea, window
onKeyDown document, Image, Link, Textarea
onKeyPress document, Image, Link, Textarea
onKeyUp document, Image, Link, Textarea
onLoad Image, Layer, window
onMouseDown Button, document, Link
onMouseMove Ninguno (debe asociarse a uno)
onMouseOut Layer, Link
onMouseOver Layer, Link
onMouseUp Button, document, Link
onMove window
onReset Form
onResize window
onSelect Text, Textarea
onSubmit Form
onUnload window

2. Métodos de evento disponibles en JavaScript

Los siguientes métodos de evento pueden utilizarse en JavaScript:

Métodos de evento Función que realizan
blur() Elimina el foco del objeto desde el que se llame
click() Simula la realización de un click sobre el objeto desde el que se llame
focus() Lleva el foco al objeto desde el que se llame
select() Selecciona el área de texto del campo desde el que se llame
submit() Realiza el envío del formulario desde el que se llame

 Ejemplo:

<HTML>
<HEAD><TITLE>Eventos</TITLE>
<SCRIPT>
<!--
function Reacciona(campo) {
    alert("¡Introduzca un valor!")
    campo.focus()
}
//-->
</SCRIPT></HEAD>
<BODY> <FORM METHOD=POST>
<INPUT TYPE=text NAME=campo onFocus="Reacciona(this)">
</FORM> </BODY> </HTML>

3. Eventos onLoad y onUnload

Se usan como atributos del tag <BODY> de HTML.

Ejemplo:

<BODY onLoad="Hola()" onUnload="Adios()">

La función Hola() se ejecutará antes de que se cargue la página y la función Adios() al abandonarla.

Ejemplo:

<HTML>
<HEAD>
<TITLE>Ejemplo onLoad y onUnload</TITLE>
</HEAD>
<BODY onLoad="alert('¡Bienvenido a mi página!')" onUnload="alert('¡Vuelva pronto!')">
...
</BODY>
</HTML>

En este otro ejemplo se utilizan funciones:

<HTML>
<HEAD>
<TITLE>Ejemplo con funciones</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
var name = ""
function Hola() {
    nombre = prompt('Introduzca su nombre:','')
    alert('¡Hola ' + nombre + '!')
}

function Adios() {
    alert('¡Adios ' + nombre + '!')
}
//-->
</SCRIPT>
</HEAD>
<BODY onLoad="Hola()" onUnload="Adios()">
...
</BODY>
</HTML>

4. Ejemplo de aplicación en formularios

Vamos a ver un ejemplo para un campo de texto:

<INPUT TYPE=text NAME="test" onBlur="alert('¡Gracias!')" onChange="Comprueba(this)">

En este ejemplo, simulamos una calculadora interactiva:

<HTML>
<HEAD><TITLE>Calculadora interactiva</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function Calcula(form) {
    form.resultados.value = eval(form.entrada.value)
}

function CogeExpresion(form) {
    form.entrada.blur()
    form.entrada.value = prompt("Introduce una expresión matemática válida en JavaScript","")
    Calcula(form)
} //-->
</SCRIPT></HEAD> <BODY> <FORM METHOD=POST>
Calculadora interactiva:
<INPUT TYPE=text NAME="entrada" VALUE="" onFocus="CogeExpresion(this.form)">
<BR>El resultado es:<INPUT TYPE=text NAME="resultados" VALUE="" onFocus="this.blur()">
</FORM> </BODY> </HTML> 

 

 

 

Capítulo 6: Creación de formularios interactivos

1. Acceso a los formularios de una página

Los formularios y campos de formulario contenidos en una página pueden ser accedidos desde un script JavaScript. El array forms almacena un elemento por cada formulario que aparece en la página, en el orden en que estén en el
código fuente. De este modo, en el ejemplo siguiente

<FORM METHOD=POST NAME="Formu">

para acceder al formulario, estas tres formas son equivalentes:

document.forms[0] (primer formulario)
document.forms["Formu"]
document.Formu

1.1. Propiedades del objeto formulario

Propiedad Descripción
action Cadena que contiene el valor del atributo ACTION del tag FORM
elements Array que contiene una entrada por cada elemento en el formulario (como campos de texto, listas de selección, botones,...)
encoding Cadena que contiene el tipo MIME utilizado para codificar los contenidos del formulario que se envían al servidor. Refleja el atributo ENCTYPE del tag FORM
name Cadena que contiene el valor del atributo NAME del tag FORM
target Cadena que contiene el nombre de la ventana objetivo del submit (ventana en la que se publican los resultados)
length Refleja el número de elementos del formulario
method Cadena que contiene el valor del atributo METHOD del tag FORM

1.2. Métodos del objeto form

Método Descripción
handleEvent Invoca el manejador del evento especificado
reset Simula la pulsación del botón del ratón sobre un botón de reset del formulario
submit Envía el formulario

 Ejemplo:

<HTML>
<HEAD><TITLE>Ejemplo de metodo submit()</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function CompruebaValor(Formu) {
   if (Formu.respuesta.value == "100")
      Formu.submit()
   else
      Formu.respuesta.value = ""
} //-->
</SCRIPT>
</HEAD>
<BODY>
<FORM METHOD=POST  onSubmit="alert('¡Respuesta correcta!'); return false">
¿Cuánto vale 10 * 10?
<INPUT TYPE="text" NAME="respuesta" onChange="CompruebaValor(this.form)">
</FORM>
</BODY>
</HTML>

1.3. Eventos de formulario

Evento Descripción
onReset Captura la pulsación del botón reset
onSubmit Captura la pulsación del botón submit

 2. Acceso a los elementos de un formulario

Para acceder a los elementos de un formulario desde un script, se utiliza el array elements. Este array contiene una entrada para cada objeto del formulario (button, checkbox, fileupload, hidden, password, radio, reset, select, submit, text, y textarea), en el orden en que aparecen el el código fuente.

Por ejemplo, si un formulario de nombre MiFormu tiene un campo de texto (text) y dos cuadros de selección (checkbox), podemos acceder a ellos con los elementos:

MiFormu.elements[0]
MiFormu.elements[1]
MiFormu.elements[2]

Otra posibilidad es utilizar el nombre del elemento al cual se desea acceder. Así, si el campo de texto del ejemplo anterior se llama MiTexto, las siguientes opciones son equivalentes:

MiFormu.elements[0]
MiFormu.elements["MiTexto"]
MiFormu.MiTexto

Ejemplo: utilización del array elements en una tabla de multiplicar.

<HTML>
<HEAD>
<TITLE>Tabla de multiplicar</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function Calcula(Formu) {
   var num = 1
   var Numero = Formu.Numero.value
   Formu.elements[num].value = Numero * num++
   Formu.elements[num].value = Numero * num++
   Formu.elements[num].value = Numero * num++
   Formu.elements[num].value = Numero * num++
   Formu.elements[num].value = Numero * num++
   Formu.elements[num].value = Numero * num++
   Formu.elements[num].value = Numero * num++
   Formu.elements[num].value = Numero * num++
   Formu.elements[num].value = Numero * num++
   Formu.elements[num].value = Numero * num++
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM METHOD=POST>
Number: <INPUT TYPE=text NAME="Numero" VALUE=1 onChange="Calcula(this.form);"><BR>
x 1: <INPUT TYPE=text NAME="1" VALUE=1 onFocus="blur();"><BR>
x 2: <INPUT TYPE=text NAME="2" VALUE=2 onFocus="blur();"><BR>
x 3: <INPUT TYPE=text NAME="3" VALUE=3 onFocus="blur();"><BR>
x 4: <INPUT TYPE=text NAME="4" VALUE=4 onFocus="blur();"><BR>
x 5: <INPUT TYPE=text NAME="5" VALUE=5 onFocus="blur();"><BR>
x 6: <INPUT TYPE=text NAME="6" VALUE=6 onFocus="blur();"><BR>
x 7: <INPUT TYPE=text NAME="7" VALUE=7 onFocus="blur();"><BR>
x 8: <INPUT TYPE=text NAME="8" VALUE=8 onFocus="blur();"><BR>
x 9: <INPUT TYPE=text NAME="9" VALUE=9 onFocus="blur();"><BR>
x 10: <INPUT TYPE=text NAME="10" VALUE=10 onFocus="this.blur();"><BR>
<INPUT TYPE=button NAME="Calcula" VALUE="Calcula" onClick="Calcula(this.form);">
</FORM>
</BODY>
</HTML>

La gran ventaja del array elements es la simplificación del código mediante la utilización de bucles y el acceso a los elementos del formulario mediante índices. Por ejemplo, la función Calcula() del ejemplo anterior puede escribirse de la siguiente forma:

function Calcula(Formu) {
   var Numero = Formu.Numero.value
   for(num = 1; num <= 10; num++) {
      Formu.elements[num].value = Numero * num
   }
}

3. Métodos, propiedades y eventos de los elementos de un formulario

Cada elemento de un formulario posee propiedades y métodos que pueden utilizarse en los scripts para actuar sobre el formulario. A continuación vamos a describir los más importantes.

3.1. Cuadro de selección (checkbox)

Propiedad Descripción
checked Indica el estado actual del cuadro de selección
defaultChecked Indica el estado por defecto del elemento
name Indica el nombre del elemento tal y como está especificado en el tag INPUT
value Indica el valor el elemento tal y como está especificado en el tag INPUT
Método Descripción
click() Simula la pulsación del botón del ratón sobre el cuadro de selección
Evento Descripción
onClick Captura la pulsación del botón del ratón sobre el cuadro de selección

 3.2. Botón de selección (radio)

Es similar al cuadro de selección (checkbox) con la diferencia de que varios elementos de este tipo pueden agruparse con un solo nombre de modo que sólo uno de ellos podrá estar seleccionado.

Propiedad Descripción
checked Indica el estado actual del botón de selección
defaultChecked Indica el estado por defecto del elemento
name Indica el nombre del elemento tal y como está especificado en el tag INPUT
value Indica el valor del elemento tal y como está especificado en el tag INPUT
index Indica el índice del botón de selección actualmente seleccionado en el grupo
length Indica el número de botones de selección en el grupo
Método Descripción
click() Simula la pulsación del botón del ratón sobre el botón de selección
Evento Descripción
onClick Captura la pulsación del botón del ratón sobre el botón de selección

 Ejemplo:

<HTML>
<HEAD>
<TITLE>Ejemplo de cuadro de seleccion (checkbox)</TITLE>
<SCRIPT>
<!--
function Calcula(Formu, Campo) {
    if (Formu.BotonAccion[1].checked) {
        Formu.resultado.value = Math.sqrt(Formu.entrada.value)
    } else {
        Formu.resultado.value = Formu.entrada.value * Formu.entrada.value
    }
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM METHOD=POST>
<P>Valor:<BR>
<INPUT TYPE="text" NAME="entrada" VALUE=0 onChange="Calcula(this.form, this.name);">
<P>Acción:<BR>
<INPUT TYPE="radio" NAME="BotonAccion" VALUE="cuadrado"> Al cuadrado<BR>
<INPUT TYPE="radio" NAME="BotonAccion" VALUE="raiz2"> Raiz cuadrada<BR>
<P>Resultado:<BR>
<INPUT TYPE=text NAME="resultado" VALUE=0>
</FORM>
</BODY>
</HTML>

3.3. Cuadro de texto (text)

Propiedad Descripción
defaultValue Indica el valor por defecto del elemento tal y como está especificado en el tag INPUT
name Indica el nombre del elemento tal y como está especificado en el tag INPUT
value Indica el valor actual del elemento
Método Descripción
focus() Da el foco al elemento (convierte el cuadro de texto en la zona activa actual)
blur() Quita el foco del elemento
select() Selecciona el texto actual del cuadro de texto
Evento Descripción
onChange Captura el cambio de valor del campo de texto
onFocus Captura la recuperación del foco por parte del cuadro de texto
onBlur Captura la pérdida del foco
onSelect Captura la selección del texto

 3.4. Lista de selección (select)

Propiedad Descripción
options Array que contiene una entrada por cada elemento de la lista de selección
selectedIndex Da el índice de la opción de la lista seleccionada actualmente
options[n].
value
Indica el valor del elemento n de la lista, tal y como está especificado en el tag OPTION
options[n].
text
Contiene la cadena de texto que representa la opción n de la lista
options[n].
selected
Indica si la opción n está actualmente seleccionada
options[n].
defaultSelected
Indica si la opción n es la seleccionada por defecto
Método Descripción
focus() Da el foco al elemento
blur() Quita el foco del elemento
Evento Descripción
onChange Captura el cambio de selección en la lista
onFocus Captura la recuperación del foco por parte de la lista de selección
onBlur Captura la pérdida del foco

 Como ejemplo, dado el siguiente código HTML:

<SELECT NAME="Ejemplo" onFocus="Ver()">
<OPTION SELECTED VALUE="Opción 1">1
<OPTION VALUE="Opción 2">2
<OPTION VALUE="Opción 3">3
</SELECT>

las propiedades de la lista de selección se acceden como se muestra, tomando los valores que aparecen a la derecha:

Ejemplo.options[1].value = "Opción 2"
Ejemplo.options[2].text = "3"
Ejemplo.selectedIndex = 0
Ejemplo.options[0].defaultSelected = true
Ejemplo.options[1].selected = false

3.5. Area de texto (textarea)

Posee las propiedades defaultValue, name y value, con el mismo significado que para el cuadro de texto. Los métodos focus(), blur() y select() pueden utilizarse con este elemento, al igual que los eventos onFocus, onBlur y onSelect.

3.6. Botones submit y reset

Los botones submit y reset poseen las propiedades name y value, puediendo utilizarse con ellos el método click() y el evento onClick().

El botón submit posee un método y un evento específicos: el método submit() y el evento onSubmit. El método submit() realiza el emisión del formulario (es equivalente a pulsar el botón submit). El evento onSubmit se produce cuando se envía el formulario, permitiento realizar operaciones con los datos del formulario antes de realizar el envío (por ejemplo, validación de campos).

4. Ejemplo final: calculadora

<HTML>
<HEAD>
<TITLE>Calculadora</TITLE>
<SCRIPT>
<!--
var total = 0
var UltimaOperacion = "+"
var NuevoNumero = true

function IntroduceNumero(Digito) {
    var Formu = Digito.form
    if (NuevoNumero) {
        BorraNumero(Formu)
        NuevoNumero = false
    }
    Formu.display.value = Formu.display.value + Digito.name
}

function Limpiar(Formu) {
    total = 0
    UltimaOperacion = "+"
    Formu.display.value = ""
}

function BorraNumero(Formu) {
    Formu.display.value = ""
}

function Calcula(Operacion) {
    var Formu = Operacion.form
    var Expresion = total + UltimaOperacion + Formu.display.value
    UltimaOperacion = Operacion.value
    total = eval(Expresion)
    Formu.display.value = total
    NuevoNumero = true
}
//-->
</SCRIPT>
</HEAD>

<BODY>
<FORM>
<TABLE BORDER=1>
<TR><TD COLSPAN=4><INPUT TYPE=text NAME=display VALUE="" onFocus="this.blur();"></TD></TR>
<TR>
<TD><INPUT TYPE=button NAME="7" VALUE=" 7 " onClick="IntroduceNumero(this);"></TD> <TD><INPUT TYPE=button NAME="8" VALUE=" 8 " onClick="IntroduceNumero(this);"></TD>
<TD><INPUT TYPE=button NAME="9" VALUE=" 9 " onClick="IntroduceNumero(this);"></TD>
<TD><INPUT TYPE=button NAME="+" VALUE=" + " onClick="Calcula(this);"></TD></TR><TR> <TD><INPUT TYPE=button NAME="4" VALUE=" 4 " onClick="IntroduceNumero(this);"></TD>
<TD><INPUT TYPE=button NAME="5" VALUE=" 5 " onClick="IntroduceNumero(this);"></TD>
<TD><INPUT TYPE=button NAME="6" VALUE=" 6 " onClick="IntroduceNumero(this);"></TD>
<TD><INPUT TYPE=button NAME="-" VALUE=" - " onClick="Calcula(this);"></TD>
</TR>
<TR>
<TD><INPUT TYPE=button NAME="1" VALUE=" 1 " onClick="IntroduceNumero(this);"></TD>
<TD><INPUT TYPE=button NAME="2" VALUE=" 2 " onClick="IntroduceNumero(this);"></TD>
<TD><INPUT TYPE=button NAME="3" VALUE=" 3 " onClick="IntroduceNumero(this);"></TD>
<TD><INPUT TYPE=button NAME="*" VALUE=" * " onClick="Calcula(this);"></TD></TR><TR> <TD><INPUT TYPE=button NAME="0" VALUE=" 0 " onClick="IntroduceNumero(this);"></TD>
<TD><INPUT TYPE=button NAME="C" VALUE=" C " onClick="Limpiar(this.form);"></TD>
<TD><INPUT TYPE=button NAME="CE" VALUE="CE" onClick="BorraNumero(this.form);"></TD>
<TD><INPUT TYPE=button NAME="/" VALUE=" / " onClick="Calcula(this);"></TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>

Obsérvese cómo se referencia un formulario a partir de un elemento del mismo: var Formu = Digito.form permite obtener el formulario que contiene el botón Digito.

 © 2000 Javier de Lucas