Javascript Del Lado Del Cliente
Javascript Del Lado Del Cliente
Javascript Del Lado Del Cliente
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 1 de 81
Desarrollo en Javascript del lado del cliente
En este Manual de Javascript explicamos todos los recursos con los que cuenta un
programador para manipulación de una página web. Explicamos cómo un desarrollador,
mediante Javascript, puede alterar el estado de una página web para responder a acciones del
usuario y crear todo tipo de efectos y aplicaciones web dinámicas.
Básicamente vamos a ver cómo se desarrolla con Javascript del lado del cliente, accediendo a
los objetos del navegador por medio de programación de scripts.
En el manual explicaremos los recursos con los que cuentas para modificar la página
dinámicamente, gracias a la ejecución de scripts Javascript y la manipulación de los objetos del
navegador, ya sea la propia ventana, o los documentos que se están visualizando y todos los
objetos que se encuentran en ellos, lo que se conoce como DOM.
Aprenderás también a definir comportamientos como respuesta a eventos del usuario, que es
la base de la interacción y que permitirá escribir programas que se ejecutarán cuando ocurren
cosas, como clics sobre determinados elementos, salirse de una página, enviar un formulario y
un largo etc.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 2 de 81
Desarrollo en Javascript del lado del cliente
Las siguientes personas han participado como autores escribiendo artículos de este manual.
Dairo Galeano
Desarrollador independiente
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 3 de 81
Desarrollo en Javascript del lado del cliente
En esta segunda parte partimos de la base que las personas conocen el lenguaje y la sintaxis y
vamos a ver cómo utilizarlo para hacer programación de páginas enriquecidas del lado del
cliente.
En esta segunda parte del manual de Javascript vamos a tratar de explicar todos los recursos
con los que cuenta un programador de Javascript y con los que puede crear todo tipo de efectos
y aplicaciones.
Para leer y entender bien lo que viene en los siguientes capítulos es necesario haber leído antes
la primera parte de este manual: Programación en Javascript I, donde se explican las bases
sobre las que tenemos que asentar los siguientes conocimientos. En la primera parte de este
manual conocimos los orígenes y las aplicaciones de Javascript, pero sobretodo hicimos
hincapié en su sintaxis, muy importante para entender los scripts que haremos en los
siguientes capítulos.
Los objetivos de los siguientes capítulos cubrirán aspectos diversos de Javascript como:
Como se puede ver, todos los temas tienen un fuerte carácter práctico y cubren aspectos varios
con los que formarnos a nivel avanzado en Javascript. Esperamos que sirvan para iluminar un
área tan amplia del desarrollo de páginas web como es el scripting del lado del cliente.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 4 de 81
Desarrollo en Javascript del lado del cliente
Vamos sin más pausa con esta segunda parte del manual, que resultará mucho más
entretenida y práctica que la primera.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 5 de 81
Desarrollo en Javascript del lado del cliente
Comenzamos a trabajar con los objetos que nos sirven para controlar directamente los
elementos de la página, los objetos que se generan automáticamente en el navegador al visitar
una página. A lo largo de estos artículos trataremos diversos componentes del DOM de
Javascript (Modelo de Objetos del Documento).
Llegamos al tema más importante para aprender a manejar Javascript y controlar lo que
ocurre dentro del navegador con toda la potencia que nos ofrece el lenguaje. Se trata de
aprender el DOM (Document Object Model o modelo de objetos del navegador) que nos sirve
para acceder a cualquiera de los componentes que hay dentro de una página. Por medio del
DOM podremos controlar al navegador en general y a los distintos elementos que se
encuentran en la página.
Sin duda, este tema le va a dar mucha vida a nuestros ejemplos, ya que hasta ahora no tenían
mucho carácter práctico porque no trabajaban con el navegador y las páginas, que es
realmente para lo que está hecho Javascript. De modo que esperamos que a partir de aquí el
manual sea más entretenido para todos, porque va a cubrir los aspectos más prácticos.
Cuando se carga una página, el navegador crea una jerarquía de objetos en memoria que sirven
para controlar los distintos elementos de dicha página. Con Javascript y la nomenclatura de
objetos que hemos aprendido, podemos trabajar con esa jerarquía de objetos, acceder a sus
propiedades e invocar sus métodos.
Nota: A lo largo de este manual usamos el término "Jerarquía de objetos del navegador"
cuando sería más correcto hablar simplemente del DOM que es como se conoce más
técnicamente. El motivo es que cuando se escribió este texto todavía no era común el
término DOM, aunque con el tiempo se ha adoptado esa jerga y es la manera como los
desarrolladores conocen normalmente al árbol de elementos de la página que están
modelados en objetos a los que podemos acceder para cambiar el estado de un documento
HTML.
Cualquier elemento de la página se puede controlar de una manera u otra accediendo a esa
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 6 de 81
Desarrollo en Javascript del lado del cliente
jerarquía. Es crucial conocerla bien para poder controlar perfectamente las páginas web con
Javascript o cualquier otro lenguaje de programación del lado del cliente.
Antes de empezar a ver rigurosamente la jerarquía de objetos del navegador, vamos a ver el
ejemplo típico de acceso a una propiedad de esta jerarquía para cambiar el aspecto de la
página. Se trata de una propiedad de la página que almacena el color de fondo de la página
web: la propiedad bgColor del objeto document.
document.bgColor = "red"
En esta página definida con color de fondo blanco hemos cambiado esa propiedad luego con
Javascript, por lo que saldrá con color de fondo rojo.
<HTML>
<HEAD>
<TITLE>Prueba bgColor</TITLE>
</HEAD>
<BODY bgcolor=white>
<script>
document.bgColor = "red"
</script>
</BODY>
</HTML>
En los ejemplos que hemos visto hasta ahora también hemos hecho uso de los objetos de la
jerarquía del navegador. En concreto hemos utilizado mucho el método write() del objeto
document para escribir un texto en la página.
Vamos a ver ahora como está compuesta esta jerarquía de objetos del navegador, más conocida
como DOM, detallando alguno de sus elementos y una explicación sobre como se accede a
ellos. Como una imagen vale más que mil palabras, echa un vistazo al gráfico siguiente que
contiene un listado parcial de objetos que pueden formar parte de ella.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 7 de 81
Desarrollo en Javascript del lado del cliente
| | | Jerarquía de objetos
del navegador en Javascript 1.2. Podría faltar por recoger algún objeto, pero sirve
perfectamente para hacerse una idea de cómo se organizan los objetos en la jerarquía. |
Como se puede apreciar, todos los objetos comienzan en un objeto que se llama window. Este
objeto ofrece una serie de métodos y propiedades para controlar la ventana del navegador. Con
ellos podemos controlar el aspecto de la ventana, la barra de estado, abrir ventanas
secundarias y otras cosas que veremos más adelante cuando expliquemos con detalle el objeto.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 8 de 81
Desarrollo en Javascript del lado del cliente
Además de ofrecer control, el objeto window da acceso a otros objetos como el documento (La
página web que se está visualizando), el historial de páginas visitadas o los distintos frames de
la ventana. De modo que para acceder a cualquier otro objeto de la jerarquía deberíamos
empezar por el objeto window. Tanto es así que javascript entiende perfectamente que la
jerarquía empieza en window aunque no lo señalemos.
En los ejemplos incluidos en el capítulo anterior podíamos haber escrito también las
sentencias de acceso a la jerarquía empezando por el objeto window, de esta manera.
window.document.bgColor = "red"
No lo hicimos por que quedase más claro el código y ahorrar algo de texto, pero ahora ya
sabemos que toda la jerarquía empieza en el objeto window.
Muchas de las propiedades del objeto window son a su vez otros objetos. Es el caso de objetos
como el historial de páginas web o el objeto documento, que tienen a su vez otras propiedades
y métodos.
Entre ellos destaca el objeto document, que contiene todas las propiedades y métodos
necesarios para controlar muchos aspectos de la página. Ya hemos visto alguna propiedad
como bgColor, pero tiene muchas otras como el título de la página, las imágenes que hay
incluidas, los formularios, etc. Muchas propiedades de este objeto son a su vez otros objetos,
como los formularios. Los veremos todos cuando tratemos cada uno de los objetos por
separado. Además, el objeto document tiene métodos para escribir en la página web y para
manejar eventos de la página.
El objetivo de este capítulo sobre la jerarquía de objetos es aprender a navegar por ella para
acceder a cualquier elemento de la página. Esta no es una tarea difícil, pero puede haber algún
caso especial en el que acceder a los elementos de la página se haga de una manera que aun no
hemos comentado.
Como ya dijimos, toda la jeraquía empieza en el objeto window, aunque no era necesario hacer
referencia a window para acceder a cualquier objeto de la jerarquía. Luego en importancia está
el objeto document, donde podemos encontrar alguna propiedad especial que merece la pena
comentar por separado, porque su acceso es un poco diferente. Se trata de las propiedades que
son arrays, por ejemplo la propiedad images es un array con todas las imágenes de la página
web. También encontramos arrays para guardar los enlaces de la página, los applets, los
formularios y las anclas.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 9 de 81
Desarrollo en Javascript del lado del cliente
segunda imagen y así hasta que las introduce todas. Vamos a ver un bucle que recorre todas las
imágenes de la página e imprime su propiedad src, que contiene la URL donde está situada la
imagen.
for (i=0;i<document.images.length;i++){
document.write(document.images[i].src)
document.write("<br>")
Utilizamos la propiedad length del array images para limitar el número de iteraciones del
bucle. Luego utilizamos el método write() del objeto document pasándole el valor de cada una
de las propiedades src de cada imagen.
Podemos ver una página con varias imágenes donde se accede a sus propiedades con el bucle
anterior.
Ahora vamos a ver el uso de otro array de objetos. En este caso vamos a acceder un poco más
dentro de la jerarquía para llegar a la matriz elements de los objetos formulario, que contiene
cada uno de los elementos que componen el formulario. Para ello tendremos que acceder a un
formulario de la página, al que podremos acceder por el array de formularios, y dentro de él a
la propiedad elements, que es otro array de objetos. Para cada elemento del formulario vamos
a escribir su propiedad value, que corresponde con la propiedad value que colocamos en
HTML.
for (i=0;i<document.forms[0].elements.length;i++){
document.write(document. forms[0].elements[i].value)
document.write("<br>")
Es un bucle muy parecido al que teníamos para recorrer las imágenes, con la diferencia que
ahora recorremos el vector de elements, al que accedemos por la jerarquía de objetos pasando
por el array de formularios en su posición 0, que corresponde con el primer formulario de la
página.
Para ver este ejemplo en funcionamiento, tenemos una página con un formulario donde se
ejecuta este recorrido a sus elementos.
Con esto hemos aprendido a movernos por la jerarquía de objetos, con lo que podremos
acceder a cualquier elemento del navegador o la página. En adelante conoceremos con detalle
cada uno de los objetos de la jerarquía, empezando por el objeto window y bajando por la
jerarquía hasta verlos todos.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 10 de 81
Desarrollo en Javascript del lado del cliente
A continuación podemos ver las propiedades del objeto window. Hay algunas muy útiles y
otras que lo son menos.
closed
defaultStatus
document
Frame
frames array
El vector que contiene todos los frames de la página. Se accede por su índice a partir de 0.
history
innerHeight
Tamaño en pixels del espacio donde se visualiza la página, en vertical. (Javascript 1.2)
innerWidth
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 11 de 81
Desarrollo en Javascript del lado del cliente
Tamaño en pixels del espacio donde se visualiza la página, en horizontal. (Javascript 1.2)
length
location
La URL del documento que se está visualizando. Podemos cambiar el valor de esta propiedad
para movernos a otra página. Ver también la propiedad location del objeto document.
locationbar
menubar
name
opener
Hace referencia a la ventana de navegador que abrió la ventana donde estamos trabajando. Se
verá con detenimiento en el tratamiento de ventanas con Javascript.
outherHeight
Tamaño en pixels del espacio de toda la ventana, en vertical. Esto incluye las barras de
desplazamiento, botones, etc. (Javascript 1.2)
outherWidth
Tamaño en pixels del espacio de toda la ventana, en horizontal. Esto incluye las barras de
desplazamiento. (Javascript 1.2)
parent
Hace referencia a la ventana donde está situada el frame donde estamos trabajando. La
veremos con detenimiento al estudiar el control de frames con Javascript.
personalbar
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 12 de 81
Desarrollo en Javascript del lado del cliente
self
scrollbars
status
statusbar
toolbar
top
Hace referencia a la ventana donde está situada el frame donde estamos trabajando. Como la
propiedad parent.
window
Vamos a ver un ejemplo de utilización de la propiedad status del objeto window. Esta
propiedad sirve para escribir un texto en la barra de estado del navegador (la barra de debajo
de la ventana). En este ejemplo hemos tenido que adelantarnos un poco en la marcha del
manual, pues utilizamos un manejador de eventos y no hemos visto todavía lo que son. En
concreto utilizamos el manejador de eventos onclick, que sirve para ejecutar sentencias
Javascript cuando el usuario pulsa un elemento de la página.
Veamos ya el código que hace que se cambie el texto de la barra de estado cuando pulsemos un
botón.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 13 de 81
Desarrollo en Javascript del lado del cliente
<form>
</form>
Simplemente asignamos un texto a la propiedad status del objeto window. El texto que
colocamos en la barra de estado está escrito entre comillas simples porque estamos
escribiendo dentro de unas comillas dobles.
Vamos a ver ahora los distintos métodos que tiene el objeto window. Muchos de estos métodos
habrá que verlos por separado porque son muy útiles y aun no los hemos utilizado, ahora
vamos a listarlos y ya veremos algunos ejemplos.
alert(texto)
Presenta una ventana de alerta donde se puede leer el texto que recibe por parámetro
back()
Ir una página atrás en el historial de páginas visitadas. Funciona como el botón de volver de la
barra de herramientas. (Javascript 1.2)
blur()
captureEvents(eventos)
clearInterval()
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 14 de 81
Desarrollo en Javascript del lado del cliente
setInterval().(Javascript 1.2)
clearTimeout()
close()
confirm(texto)
find()
focus()
forward()
home()
moveBy(pixelsX, pixelsY)
Mueve la ventana del navegador los pixels que se indican por parámetro hacia la derecha y
abajo. (Javascript 1.2)
moveTo(pixelsX, pixelsY)
Mueve la ventana del navegador a la posición indicada en las coordenadas que recibe por
parámetro. (Javascript 1.2)
open()
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 15 de 81
Desarrollo en Javascript del lado del cliente
Abre una ventana secundaria del navegador. Se puede aprender a utilizarla en el reportaje de
cómo abrir ventanas secundarias.
print()
prompt(pregunta,inicializacion_de_la_respuesta)
Muestra una caja de diálogo para pedir un dato. Devuelve el dato que se ha escrito.
releaseEvents(eventos)
Deja de capturar eventos del tipo que se indique por parámetro. (Javascript 1.2)
resizeBy(pixelsAncho,pixelsAlto)
resizeTo(pixelsAncho,pixelsAlto)
Redimensiona la ventana del navegador para que ocupe el espacio en pixels que se indica por
parámetro (Javascript 1.2)
routeEvent()
scroll(pixelsX,pixelsY)
Hace un scroll de la ventana hacia la coordenada indicada por parámetro. Este método está
desaconsejado, pues ahora se debería utilizar scrollTo()(Javascript 1.1)
scrollBy(pixelsX,pixelsY)
Hace un scroll del contenido de la ventana relativo a la posición actual. (Javascript 1.2)
scrollTo(pixelsX,pixelsY)
Hace un scroll de la ventana a la posición indicada por el parámetro. Este método se tiene que
utilizar en lugar de scroll. (Javascript 1.2)
setInterval()
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 16 de 81
Desarrollo en Javascript del lado del cliente
Define un script para que sea ejecutado indefinidamente en cada intervalo de tiempo.
(Javascript 1.2)
setTimeout(sentencia,milisegundos)
Define un script para que sea ejecutado una vez después de un tiempo de espera determinado.
stop()
Para ilustrar un poco mejor el funcionamiento de alguno de estos métodos -los más extraños-,
hemos creado una página web que los utiliza. El código de la página se muestra a continuación
y también podemos ver la página en marcha.
<form>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</form>
Estos ejemplos son muy simples, aunque poco prácticos. Únicamente se trata de una serie de
botones que, al pulsarlos, llaman a otros tantos métodos del objeto window. En el atributo
onclick de la etiqueta del botón se indican las sentencias Javascript que queremos que se
ejecuten cuando se pulsa sobre dicho botón.
En el capítulo siguiente veremos otros ejemplos realizados con métodos del objeto window de
Javascript, un poco más detallados.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 17 de 81
Desarrollo en Javascript del lado del cliente
Ahora vamos a realizar algún ejemplo de utilización de los métodos de la ventana. Nos vamos a
centrar en los ejemplos que sirven para sacar cajas de diálogo, que son muy útiles.
Caja de alerta
Para sacar un texto en una ventanita con un botón de aceptar. Recibe el texto por parámetro.
Caja de confirmación
Muestra una ventana con un texto indicado por parámetro y un botón de aceptar y otro de
rechazar. Dependiendo del botón que se pulsa devuelve un true (si se pulsa aceptar) o un false
(si se pulsa rechazar).
<script>
</script>
Este script muestra una caja de diálogo confirm y luego muestra en otra caja de diálogo alert el
contenido de la variable que devolvió la caja de diálogo. Nuevamente, podemos ver el
funcionamiento de este script si accedemos a esta página a parte.
Muestra una caja de diálogo donde se formula una pregunta y hay un campo de texto para
escribir una respuesta. El campo de texto aparece relleno con lo que se escriba en el segundo
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 18 de 81
Desarrollo en Javascript del lado del cliente
parámetro del método. También hay un botón de aceptar y otro de cancelar. En caso de pulsar
aceptar, el método devuelve el texto que se haya escrito. Si se pulsó cancelar devuelve null.
El ejemplo siguiente sirve para pedir el nombre de la persona que está visitando la página y
luego mostrar en la página un saludo personalizado. Utiliza un bucle para repetir la toma de
datos siempre que el nombre de la persona sea null (porque pulsó el botón de cancelar) o sea
un string vacío (porque no escribió nada).
<script>
nombre = null
</script>
Si nos fijamos en la caja prompt veremos que recibe dos parámetros. El segundo era el texto
por defecto que sale en la caja como respuesta. Lo hemos dejado como un string vacío para que
no salga nada como texto por defecto.
Hasta aquí los ejemplos de los métodos del objeto window. De todos modos, en el resto del
manual tendremos ocasión de ver cómo trabajar con muchas propiedades y métodos de este
objeto.
Con el objeto document se controla la página web y todos los elementos que contiene. El objeto
document es la página actual que se está visualizando en ese momento. Depende del objeto
window, pero también puede depender del objeto frame en caso de que la página se está
mostrando en un frame.
Veamos una lista de las propiedades del objeto document y luego veremos algún ejemplo.
alinkColor
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 19 de 81
Desarrollo en Javascript del lado del cliente
Anchor
anchors array
Applet
applets array
Area
Una etiqueta <AREA>, de las que están vinculadas a los mapas de imágenes (Etiqueta MAP). Se
accede por su nombre. (Javascript 1.1)
bgColor
classes
cookie
Una cookie
domain
Embed
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 20 de 81
Desarrollo en Javascript del lado del cliente
embeds array
fgColor
El color del texto. Para ver los cambios hay que reescribir la página.
From
forms array
ids
Image
images array
lastModified
linkColor
Link
links array
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 21 de 81
Desarrollo en Javascript del lado del cliente
location
referrer
tags
title
El titulo de la página.
URL
Lo mismo que location, pero es aconsejable utilizar location ya que URL no existe en todos los
navegadores.
vlinkColor
Después de estudiar las propiedades del objeto document, vamos a ver algún ejemplo para
ilustrar el modo de acceso y utilización de las mismas.
Vamos a utilizar el evento onclick para colocar tres botones en la página que al pulsarlos nos
cambie el color del fondo de la página.
<script>
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 22 de 81
Desarrollo en Javascript del lado del cliente
function cambiaColor(colorin){
document.bgColor = colorin
</script>
<form>
</form>
Primero definimos una función que será la encargada de cambiar el color y luego tres botones
que llamarán a la función cuando sean pulsados pasándole el color como parámetro.
Propiedad title
La propiedad title guarda la cadena que conforma el título de nuestra página web. Si
accedemos a dicha propiedad obtendremos el título y si la cambiamos, cambiará el título de la
página web.
Nota: recordamos que el título se puede ver en la barra de arriba del todo de la ventana del
navegador.
alert (document.title)
Ahora vamos a hacer una función que modifica el título de la página , asignándole el texto que
le llegue por parámetro.
function cambiaTitulo(texto){
document.title = texto
Como en el ejemplo anterior, vamos a crear varios botones que llamen a la función pasándole
distintos textos, que se colocarán en el título de la página.
<form>
<input type="Button" value="Titulo = Más dias que longanizas" onclick="cambiaTitulo('Más dias que longanizas')">
</form>
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 23 de 81
Desarrollo en Javascript del lado del cliente
Métodos de document
Vemos una lista de los eventos disponibles en el objeto document.
captureEvents()
Para capturar los eventos que ocurran en la página web. Recibe como parámetro el evento que
se desea capturar.
close()
Cierra el flujo del documento. (Se verá más adelante en este manual un artículo sobre el flujo
del documento)
contextual()
Ofrece una línea de control de los estilos de la página. En el caso que deseemos especificarlos
con Javascript.
getSelection()
Devuelve un string que contiene el texto que se ha seleccionado. Sólo funciona en Netscape.
handleEvent()
open()
releaseEvents()
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 24 de 81
Desarrollo en Javascript del lado del cliente
Liberar los eventos capturados del tipo que se especifique, enviándolos a los objetos siguientes
en la jerarquía.
routeEvent()
write()
Escribe dentro de la página web. Podemos escribir etiquetas HTML y texto normal.
writeln()
Escribe igual que el método write(), aunque coloca un salto de línea al final.
Los eventos de document sirven principalmente para controlar dos cosas. Un grupo nos ofrece
una serie de funciones para el control de los documentos, como escribir, abrirlos y cerrarlos.
Los veremos en el capítulo siguiente que habla sobre el control del flujo de escritura del
documento. El otro grupo ofrece herramientas para el control de los eventos en el documento y
lo veremos más adelante cuando tratemos con detenimiento el tema de eventos.
Se nos queda un poco suelto el método getSelection(), que sólo funciona en los navegadores de
Netscape y, por tanto, no resulta muy útil para aplicaciones que deseemos que sean
compatibles en todos los sistemas. Aun así, haremos el ejemplo sobre este método, ya que los
otros los vamos a ver en siguientes capítulos.
El ejemplo consiste en una página que tiene un poco de texto y un botón. En la página
podremos seleccionar algo de texto y luego apretar el botón, que llama a una función que
muestra en una caja alert el texto que se ha seleccionado. El código es el siguiente:
<html>
<head>
<title>Rescatar lo seleccionado</title>
<script language="JavaScript">
function mostrarSeleccionado(){
</script>
</head>
<body>
<h1>Rescatar lo seleccionado</h1>
<br>
<form>
</form>
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 25 de 81
Desarrollo en Javascript del lado del cliente
</body>
</html>
Se puede ver en funcionamiento el script en una página aparte, aunque sólo funcionará en
Netscape e Internet Explorer dará un error.
Acerca del objeto document también es interesante hablar un poco sobre el flujo de escritura
del documento o página web.
Una vez cerrado el flujo no se puede escribir en la página web, ni texto ni imágenes ni otros
elementos.
En javascript tenemos que respetar el flujo de escritura del documento forzosamente. Es por
ello que sólo podemos ejecutar sentencias document.write() (método write() del objeto
document) cuando está abierto el flujo de escritura del documento, o lo que es lo mismo,
mientras se está cargando la página.
Ejecución de los scripts mientras que carga la página. Aquí podremos ejecutar
document.write() y lo hemos hecho habitualmente en los ejemplos anteriores.
Ejecución de los scripts cuando la página ha sido cargada, como respuesta a un evento
del usuario. Aquí no podemos hacerlo porque la página ha terminado de cargarse, de
hecho, no lo hemos hecho nunca hasta ahora.
Hay un matiz que dar a que no se puede escribir en la página cuando ya está cerrado el flujo.
En realidad si que se puede, pero necesitamos abrir el flujo otra vez para escribir en la página,
tanto es así que aunque nosotros no lo abramos explícitamente Javascript se encargará de ello.
Lo que tiene que quedar claro es que si hacemos un document.write() el flujo tiene que estar
abierto y si no lo está se abrirá. El problema de abrir el flujo de escritura del documento una
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 26 de 81
Desarrollo en Javascript del lado del cliente
Para que quede claro vamos a hacer un script para escribir en la página una vez ésta ha sido
cargada. Simplemente necesitamos un botón y al pulsarlo ejecutar el método write() del objeto
document.
<form>
</form>
Los métodos open() y close() del objeto document sirven para controlar el flujo del documento
desde Javascript. Nos permiten abrir y cerrar el documento explícitamente.
<script>
function escribe(){
document.open()
window.document.write('Hola')
document.close()
</script>
<form>
</form>
Vemos que ahora no escribimos las sentencias dentro del manejador, porque, cuando hay más
de una sentencia, queda más claro poner una llamada a una función y en la función colocamos
las sentencias que queramos.
Las sentencias del ejemplo anterior, que cubren la apertura, escritura y cierre del documento.
Se pueden ver en marcha aquí.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 27 de 81
Desarrollo en Javascript del lado del cliente
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 28 de 81
Desarrollo en Javascript del lado del cliente
Los formularios forman parte del DOM de la página y son un grupo de elementos con los que
trabajaremos muy habitualmente y que por tanto, merece la pena prestar especial atención.
Aprenderemos a recibir y alterar dinámicamente los valores y estados de los elementos de
formulario con Javascript.
Para continuar vamos a ver una serie de capítulos enfocados a aprender a trabajar con los
formularios, acceder a sus elementos para controlar sus valores y actualizarlos.
El objeto form depende en la jerarquía de objetos del objeto document. En un objeto form
podemos encontrar algunos métodos y propiedades, pero lo más destacado que podremos
encontrar son cada uno de los elementos del formulario. Es decir, de un formulario dependen
todos los elementos que hay dentro, como pueden ser campos de texto, cajas de selección,
áreas de texto, botones de radio, etc.
Para acceder a un formulario desde el objeto document podemos hacerlo de dos formas.
<FORM name="f1">
</FORM>
document.f1
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 29 de 81
Desarrollo en Javascript del lado del cliente
document.forms[0]
De similar manera accedemos a los elementos de un formulario, que dependen del objeto
form.
1. A partir del nombre del objeto asignado con el atributo NAME de HTML.
2. Mediante la matriz de elementos del objeto form, con el índice del elemento al que
queremos acceder.
Podríamos acceder al campo 1 del anterior formulario de dos maneras. Con su nombre lo
haríamos así.
document.f1.campo1
Si deseamos acceder al segundo campo del formulario escribiríamos una de estas dos cosas:
document.f1.campo2
document.f1.elements[1]
recordamos que también podemos acceder a un fomulario por el array de forms, indicando el
índice del formulario al que acceder. De este modo, el acceso al campo2 sería el siguiente:
document.forms[0].campo2
document.forms[0].elements[1]
En estos casos hemos supuesto que este formulario es el primero que hay escrito en el código
HTML, por eso accedemos a él con el índice 0.
Esperamos que haya quedado claro el acceso a formularios y sus campos. Pasaremos entonces,
sin más, a un ejemplo para practicar todo esto.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 30 de 81
Desarrollo en Javascript del lado del cliente
Para ilustrar un poco el trabajo con formularios, vamos a realizar un ejemplo práctico. Puede
que algunas cosas que vamos a tratar queden un poco en el aire porque no se hayan explicado
con detenimiento antes, pero seguro que nos sirve para enterarnos de cómo se trabaja con
formularios y las posibilidadedes que tenemos.
En este ejemplo vamos a construir una calculadora, aunque bastante sencilla, que permita
realizar las operaciones básicas. Para hacer la calculadora vamos a realizar un formulario en el
que vamos a colocar tres campos de texto, los dos primeros para los operandos y un tercero
para el resultado. Además habrán unos botones para hacer las operaciones básicas.
<form name="calc">
<br>
<br>
<br>
</form>
Mediante una función vamos a acceder a los campos del formulario para recoger los operandos
en dos variables. Los campos de texto tienen una propiedad llamada value que es donde
podemos obtener lo que tienen escrito en ese momento. Mas tarde nos ayudaremos de la
función eval() para realizar la operación. Pondremos por último el resultado en el campo de
texto creado en tercer lugar, utilizando también la propiedad value del campo de texto.
A la función que realiza el cálculo (que podemos ver a continuación) la llamamos apretando los
botones de cada una de las operaciones. Dichos botones se pueden ver en el formulario y
contienen un atributo onclick que sirve para especificar las sentencias Javascript que deseamos
que se ejecuten cuando el usuario pulse sobre él. En este caso, la sentencia a ejecutar es una
llamada a la función calcula() pasando como parámetro el símbolo u operador de la operación
que deseamos realizar.
<script>
function calcula(operacion){
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 31 de 81
Desarrollo en Javascript del lado del cliente
document.calc.resultado.value = result
</script>
La función eval(), recordamos, que recibía un string y lo ejecutaba como una sentencia
Javascript. En este caso va a recibir un número que concatenado a una operación y otro
número será siempre una expresión aritmética que eval() solucionará perfectamente.
El acceso a otros elementos de los formularios se hace de manera parecida en cuanto respecta
a la jerarquía de objetos, aunque como cada elemento tiene sus particularidades las cosas que
podremos hacer con ellos diferirán un poco. Lo veremos un poco más adelante.
Vamos a ver ahora el objeto form por si solo, para destacar sus propiedades y métodos.
Tiene unas cuantas propiedades para ajustar sus atributos mediante Javascript.
action
elements array
encoding
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 32 de 81
Desarrollo en Javascript del lado del cliente
length
method
El método por el que mandamos la información. Corresponde con el atributo METHOD del
formulario.
name
El nombre del formulario, que corresponde con el atributo NAME del formulario.
target
Con estas propiedades podemos cambiar dinámicamente con Javascript los valores de los
atributos del formulario para hacer con él lo que se desee dependiendo de las exigencias del
momento.
Por ejemplo podríamos cambiar la URL que recibiría la información del formulario con la
instrucción.
document.miFormulario.action = "miPágina.asp"
O cambiar el target para submitir un formulario en una posible ventana secundaria llamada
mi_ventana.
document.miFormulario.target = "mi_ventana"
submit()
Para hacer que el formulario se submita, aunque no se haya pulsado el botón de submit.
reset()
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 33 de 81
Desarrollo en Javascript del lado del cliente
Para reinicializar todos los campos del formulario, como si se hubiese pulsado el botón de
reset. (Javascript 1.1)
Vamos a ver un ejemplo muy sencillo sobre cómo validar un formulario para submitirlo en
caso de que esté relleno. Para ello vamos a utilizar el método submit() del formulario.
</form>
Nos fijamos en que no hay botón de submit, sino un botón normal con una llamada a una
función que podemos ver a continuación.
function validaSubmite(){
if (document.miFormulario.campo1.value == "")
else
document.miFormulario.submit()
Vamos a ver ahora los campos donde podemos guardar cadenas de texto, es decir, los campos
de texto, password y hidden. Hay otro campo relacionado con la escritura de texto, el campo
TextArea, que veremos más adelante.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 34 de 81
Desarrollo en Javascript del lado del cliente
Campo Text
Es el campo que resulta de escribir la etiqueta <INPUT type="text">. Lo hemos utilizado hasta el
momento en varios ejemplos, pero vamos a parar un momento en él para describir sus
propiedades y métodos.
defaultValue
Es el valor por defecto que tiene un campo. Lo que contiene el atributo VALUE de la etiqueta
<INPUT>.
form
name
type
value
Vamos a ver un ejemplo sobre lo que puede hacer la propiedad defaultValue. En este ejemplo
tenemos un formulario y un botón de reset. Si pulsamos el botón de reset el campo de texto se
vacía porque su value de HTML era un string vacío. Pero si pulsamos el botón siguiente
llamamos a una función que cambia el valor por defecto de ese campo de texto, de modo que al
pulsar el botón de reset mostrará el nuevo valor por defecto.
<html>
<head>
<script>
function cambiaDefecto(){
document.miFormulario.campo1.defaultValue = "Hola!!"
</script>
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 35 de 81
Desarrollo en Javascript del lado del cliente
</head>
<body>
<input type="Reset">
<br>
<br>
</form>
</body>
</html>
Se pueden invocar los siguientes métodos sobre los objetos tipo Text.
blur()
focus()
select()
Como ejemplo vamos a mostrar una función que selecciona el texto de un campo de texto de
un formulario como el de la página del ejemplo anterior. Para hacerlo hemos utilizado dos
métodos, el primero para pasar el foco de la aplicación al campo de texto y el segundo para
seleccionar el texto.
function seleccionaFoco(){
document.miFormulario.campo1.focus()
document.miFormulario.campo1.select()
Campos Password
Estos funcionan igual que los hidden, con la peculiaridad que el contenido del campo no puede
verse escrito en el campo, por lo que salen asteríscos en lugar del texto.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 36 de 81
Desarrollo en Javascript del lado del cliente
Campos Hidden
Los campos hidden son como campos de texto que están ocultos para el usuario, es decir, que
no se ven en la página. Son muy útiles en el desarrollo de webs para pasar variables en los
formularios a las que no debe tener acceso el usuario.
Se colocan en con HTML con la etiqueta <INPUT type=hidden> y se rellenan de datos con su
atributo value. Mas tarde podremos cambiar el dato que figura en el campo accediendo a la
propiedad value del campo de texto igual que lo hemos hecho antes.
El campo hidden sólo tiene algunas de las propiedades de los campos de texto. En concreto
tiene la propiedad value y las propiedades que son comunes de todos los campos de
formulario: name, from y type, que ya se describieron para los campos de texto.
Los checkbox son las unas cajas que permiten marcarlas o no para verificar alguna cosa en un
formulario. Podemos ver una caja checkbok a continuación.
Los checkbox se consiguen con la etiqueta <INPUT type=checkbox>. Con el atributo NAME de la
etiqueta <INPUT> le podemos dar un nombre para luego acceder a ella con javascript. Con el
atributo CHECKED indicamos que el campo debe aparecer chequeado por defecto.``
Con Javascript, a partir de la jerarquía de objetos del navegador, tenemos acceso al checkbox,
que depende del objeto form del formulario donde está incluido.
Propiedades de un checkbox
checked
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 37 de 81
Desarrollo en Javascript del lado del cliente
defaultChecked
value
También tiene las propiedades form, name, type como cualquier otro elemento de formulario.
click()
Es como si hiciésemos un click sobre el checkbox, es decir, cambia el estado del checkbox.
blur()
focus()
Para ilustrar el funcionamiento de las checkbox vamos a ver una página que tiene un checkbox
y tres botones. Los dos primeros para mostrar las propiedades checked y value y el tercero para
invocar a su método click() con objetivo de simular un click sobre el checkbox.
<html>
<head>
<title>Ejemplo Checkbox</title>
<script>
function alertaChecked(){
alert(document.miFormulario.miCheck.checked)
function alertaValue(){
alert(document.miFormulario.miCheck.value)
function metodoClick(){
document.miFormulario.miCheck.click()
</script>
</head>
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 38 de 81
Desarrollo en Javascript del lado del cliente
<body>
<br>
<br>
<br>
<br>
</form>
</body>
</html>
Nota: En la parte de arriba podemos ver tres radio buttons en lugar de uno solo. Se colocan
tres botones porque así podemos examinar su funcionamiento al formar parte de un grupo.
Veamos que al seleccionar una opción se deselecciona la opción que estuviera marcada
antes.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 39 de 81
Desarrollo en Javascript del lado del cliente
Se consiguen con la etiqueta <INPUT type=radio>. Con el atributo NAME de la etiqueta <INPUT>
les damos un nombre para agrupar los radio button y que sólo se pueda elegir una opción entre
varias. Con el atributo value indicamos el valor de cada uno de los radio buttons. El atributo
checked nos sirve para indicar cuál de los radio butons tiene que estar seleccionado por
defecto.
Cuando en una página tenemos un conjunto de botones de radio se crea un objeto radio por
cada uno de los botones. Los objetos radio dependen del formulario y se puede acceder a ellos
por el array de elements, sin embargo también se crea un array con los botones de radio. Este
array depende del formulario y tiene el mismo nombre que los botones de radio.
checked
defaultChecked
value
El valor del campo de radio, asignado por la propiedad value del radio.
Length
El número de botones de radio que forman parte en el grupo. Accesible en el vector de radios.
Ejemplo de utilización
Veamos con un ejemplo el método de trabajo con los radio buttons en el que vamos a colocar
un montón de ellos y cada uno tendrá asociado un color. También habrá un botón y al pulsarlo
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 40 de 81
Desarrollo en Javascript del lado del cliente
<html>
<head>
<script>
function cambiaColor(){
var i
for (i=0;i<document.fcolores.colorin.length;i++){
if (document.fcolores.colorin[i].checked)
break;
document.bgColor = document.fcolores.colorin[i].value
</script>
</head>
<body>
<form name=fcolores>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</form>
</body>
</html>
Además tendremos un array de botones de radio que se llamará colorín y depende del
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 41 de 81
Desarrollo en Javascript del lado del cliente
document.form.colorin
Este array tiene en cada posición uno de los botones de radio. Así en la posición 0 está el botón
del color blanco, en la posición 1 el del color rojo... Para acceder a esos botones de radio lo
hacemos con su índice.
document.fcolores.colorin[0]
Si queremos acceder por ejemplo a la propiedad value del último botón de radio escribimos lo
siguiente.
document.fcolores.colorin[7].value
La propiedad length del array de radios nos indica el número de botones de radio que forman
parte del grupo.
document.fcolores.colorin.length
Con estas notas podremos entender más o menos bien la función que se encarga de encontrar
el radio button seleccionado y cambiar el color de fondo de la página.
Se define una variable en la que introduciremos el índice del radio button que tenemos
seleccionado. Para ello vamos recorriendo el array de botones de radio hasta que encontramos
el que tiene su propiedad checked a true. En ese momento salimos del bucle, con lo que la
variable i almacena el índice del botón de radio seleccionado. En la última línea cambiamos el
color de fondo a lo que hay en el atributo value del radio button seleccionado.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 42 de 81
Desarrollo en Javascript del lado del cliente
El objeto select de un formulario es una de esas listas desplegables que nos permiten
seleccionar un elemento. Se despliegan apretando sobre una flecha, a continuación se puede
escoger un elemento y para acabar se vuelven a plegar. Se puede ver un elemento select de un
formulario a continuación.
length
Option
Hace referencia a cada una de sus opciones. Son por si mismas objetos.
options
selectedIndex
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 43 de 81
Desarrollo en Javascript del lado del cliente
Aparte de las conocidas propiedades comunes a todos los elementos de formulario: form y
name y type.
blur()
focus()
Objeto option
Tenemos que pararnos a ver también este objeto para entender bien el campo select.
Recordamos que las option son las distintas opciones que tiene un select, expresadas con la
etiqueta <OPTION>.
Propiedades de option
defaultSelected
Indica con un true o un false si esa opción es la opción por defecto. La opción por defecto se
consigue con HTML colocando el atributo selected a un option.
index
selected
text
Es el texto de la opción. Lo que puede ver el usuario en el select, que se escribe después de la
etiqueta <OPTION>.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 44 de 81
Desarrollo en Javascript del lado del cliente
value
Indica el valor de la opción, que se introduce con el atributo VALUE de la etiqueta <OPTION>.
Vamos a ver un ejemplo sobre cómo se accede a un select con Javascript, como podemos
acceder a sus distintas propiedades y a la opción seleccionada.
Vamos a empezar viendo el formulario que tiene el select con el que vamos a trabajar. Es un
select que sirve para valorar el web que estamos visitando.
<form name="fomul">
<select name="miSelect">
</select>
<br>
<br>
</form>
Ahora vamos a ver una función que recoge las propiedades más significativas del campo select
y las presenta en una caja alert.
function dimePropiedades(){
var texto
alert(texto) }
Esta función crea una variable de texto donde va introduciendo cada una de las propiedades
del select. La primera contiene el valor de la propiedad length del select, la segunda el índice de
la opción seleccionada y las dos siguientes contienen el valor y el texto de la opción
seleccionada. Para acceder a la opción seleccionada utilizamos el array options con el índice
recogido en las segunda variable.
Podemos ver un ejemplo más practico sobre qué se puede hacer con un campo select en el
reportaje de cómo hacer un navegador desplegable con Javascript.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 45 de 81
Desarrollo en Javascript del lado del cliente
Para acceder al valor seleccionado de un campo select podemos utilizar la propiedad value del
campo select en lugar de acceder a partir del vector de options.
formul.miSelect.value
Sin embargo, esta propiedad sólo está presente en navegadores Internet Explorer, por lo que es
recomendable acceder utilizando el vector de options con el índice de la posición seleccionada
si deseamos que la página sea compatible con todos los navegadores. Hemos querido añadir
este punto para que, si alguna vez utilizamos o vemos utilizar este método de acceso, sepamos
su pega y porque es mejor utilizar el vector de options.
Para acabar de describir todos los elementos de formularios vamos a ver el objeto textarea que
es un elemento que presenta un lugar para escribir texto, igual que los campos text, pero con la
particularidad que podemos escribir varias líneas a la vez.
Un campo textarea se consigue con la etiqueta <TEXTAREA>. Con el atributo name le podemos
dar un nombre para acceder al campo textarea mediante Javascript. Otros atributos
interesantes son cols y rows que sirven para indicar la anchura y altura del campo textarea en
caracteres, cols indica el número de columnas y rows el de filas. aunque no se puede acceder a
ellos con Javascript. El valor por defecto de un campo textarea se coloca entre las etiquteta
<TEXTAREA> y su correspondiente cierre.
Propiedades de textarea
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 46 de 81
Desarrollo en Javascript del lado del cliente
Se puede ver una lista de las propiedades disponibles en un textarea a continuación, que son
los mismos que un campo de texto.
defaultValue
value
Además tiene las conocidas propiedades de elementos de formulario form, name y type.
Métodos de textarea
Veamos una lista de los métodos, que son los mismos que en un campo de texto.
blur()
focus()
select()
Vamos a ver un ejemplo a continuación que presenta un formulario que tiene un textarea y un
botón. Al apretar el botón se cuenta el número de caracteres y se coloca en un campo de texto.
Para acceder al número de caracteres lo hacemos a partir del la propiedad value del objeto
textarea. Como value contiene un string podemos acceder a la propiedad length que tienen
todos los strings para averiguar su longitud.
<html>
<head>
<title>Ejemplo textarea</title>
<script>
function cuenta(){
numCaracteres = document.formul.textito.value.length
document.formul.numCaracteres.value = numCaracteres
</script>
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 47 de 81
Desarrollo en Javascript del lado del cliente
</head>
<body>
<form name="formul">
</textarea>
<br>
<br>
<br>
<br>
</form>
</body>
</html>
Para quien desee profundizar, tenemos un artículo interesante que amplía el ejemplo anterior.
Se trata de una cuenta de los caracteres del textarea a la vez que se está escribiendo dentro del
campo. Se realiza gracias al tratamiento de eventos. Se puede ver el artículo en la dirección
http://www.desarrolloweb.com/articulos/1348.php
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 48 de 81
Desarrollo en Javascript del lado del cliente
Eventos en Javascript
Los eventos son la base de la interactividad, de modo que en este apartado veremos cómo
hacer páginas que respondan a las acciones del usuario. En Javascript podemos ejecutar
código como respuesta a eventos, que son distintos tipos de acciones que el visitante puede
realizar sobre la página o sobre sus elementos.
Los eventos son la manera que tenemos en Javascript de controlar las acciones de los
visitantes y definir un comportamiento de la página cuando se produzcan. Cuando un usuario
visita una página web e interactúa con ella se producen los eventos y con Javascript podemos
definir qué queremos que ocurra cuando se produzcan.
Con javascript podemos definir qué es lo que pasa cuando se produce un evento como podría
ser que un usuario pulse sobre un botón, edite un campo de texto o abandone la página.
El manejo de eventos es el caballo de batalla para hacer páginas interactivas, porque con ellos
podemos responder a las acciones de los usuarios. Hasta ahora en este manual hemos podido
ver muchos ejemplos de manejo de uno de los eventos de Javascript, el evento onclick, que se
produce al pulsar un elemento de la página. Hasta ahora siempre hemos aplicado el evento a
un botón, pero podríamos aplicarlo a otros elementos de la página.
Para definir las acciones que queremos realizar al producirse un evento utilizamos los
manejadores de eventos. Existen muchos tipos de manejadores de eventos, para muchos tipos
de acciones del usuario. El maneador de eventos se coloca en la etiqueta HTML del elemento
de la página que queremos que responda a las acciones del usuario.
Por ejemplo tenemos el manejador de eventos onclick, que sirve para describir acciones que
queremos que se ejecuten cuando se hace un click. Si queremos que al hacer click sobre un
botón pase alguna cosa, escribimos el manejador onclick en la etiqueta <INPUT type=button> de
ese botón. Algo parecido a esto.
Se coloca un atributo nuevo en la etiqueta que tiene el mismo nombre que el evento, en este
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 49 de 81
Desarrollo en Javascript del lado del cliente
caso onclick. El atributo se iguala a las sentencias Javascript que queremos que se ejecuten al
producirse el evento.
Cada elemento de la página tiene su propia lista de eventos soportados, vamos a ver otro
ejemplo de manejo de eventos, esta vez sobre un menú desplegable, en el que definimos un
comportamiento cuando cambiamos el valor seleccionado.
<OPTION value="opcion1">Opcion 1
<OPTION value="opcion2">Opcion 2
</SELECT>
En este ejemplo cada vez que se cambia la opción muestra una caja de alerta. Podemos verlo en
una página aparte.
Dentro de los manejadores de eventos podemos colocar tantas instrucciones como deseemos,
pero siempre separadas por punto y coma. Lo habitual es colocar una sola instrucción, y si se
desean colocar más de una se suele crear una función con todas las instrucciones y dentro del
manejador se coloca una sola instrucción que es la llamada a la función.
Son instrucciones muy simples como asignar a x el valor 30, hacer una ventana de alerta con el
valor de x y cambiar el color del fondo a rojo. Podemos ver el ejemplo en una página aparte.
Sin embargo, tantas instrucciones puestas en un manejador quedan un poco confusas, habría
sido mejor crear una función así.
<script>
function ejecutaEventoOnclick(){
x = 30
window.alert(x)
window.document.bgColor = 'red'
</script>
<FORM>
</FORM>
Ahora utilizamos más texto para hacer lo mismo, pero seguro que a la mayoría les parece más
claro este segundo ejemplo. Si se desea, se puede ver esta última página en una ventana aparte
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 50 de 81
Desarrollo en Javascript del lado del cliente
En los manejadores de eventos se tiene que especificar la jerarquía entera de objetos del
navegador, empezando siempre por el objeto window. Esto es necesario porque hay algún
browser antiguo que no sobreentiende el objeto window cuando se escriben sentencias
Javascript vinculadas a manejadores de eventos.
Ahora vamos a ver una lista de los manejadores de eventos que hay disponibles en
Javascript, ofreciendo una pequeña descripción de cada uno.
Nota: Estos manejadores de eventos son los más comunes, presentes en Javascript 1.2 de
Netscape Navigator. Existen otros manejadores que también son muy interesantes y
veremos más adelante en capítulos de temas avanzados de eventos.
onabort
Este evento se produce cuando un usuario detiene la carga de una imagen, ya sea porque
detiene la carga de la página o porque realiza una acción que la detiene, como por ejemplo irse
de la página. Javascript 1.1
onblur
onchange
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 51 de 81
Desarrollo en Javascript del lado del cliente
Javascript 1.0
onclick
Se produce cuando se da una pulsación o clic al botón del ratón sobre un elemento de la
página, generalmente un botón o un enlace. Javascript 1.0
ondragdrop
Se produce cuando un usuario suelta algo que había arrastrado sobre la página web. Javascript
1.2
onerror
Se produce cuando no se puede cargar un documento o una imagen y esta queda rota.
Javascript 1.1
onfocus
onkeydown
Este evento se produce en el instante que un usuario presiona una tecla, independientemente
que la suelte o no. Se produce en el momento de la pulsación. Javascript 1.2
onkeypress
Ocurre un evento onkeypress cuando el usuario deja pulsada una tecla un tiempo
determinado. Antes de este evento se produce un onkeydown en el momento que se pulsa la
tecla.. Javascript 1.2
onkeyup
Se produce cuando el usuario deja de apretar una tecla. Se produce en el momento que se
libera la tecla. Javascript 1.2
onload
Este evento se desata cuando la página, o en Javascript 1.1 las imágenes, ha terminado de
cargarse. Javascript 1.0
onmousedown
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 52 de 81
Desarrollo en Javascript del lado del cliente
onmousemove
onmouseout
Se desata un evento onmuoseout cuando el puntero del ratón sale del área ocupada por un
elemento de la página. Javascript 1.1
onmouseover
Este evento se desata cuando el puntero del ratón entra en el área ocupada por un eolemento
de la página. Javascript 1.0
onmouseup
Este evento se produce en el momento que el usuario suelta el botón del ratón, que
previamente había pulsado. Javascript 1.2
onmove
Evento que se ejecuta cuando se mueve la ventana del navegador, o un frame. Javascript 1.2
onresize
Evento que se produce cuando se redimensiona la ventana del navegador, o el frame, en caso
de que la página los tenga. Javascript 1.2
onreset
Este evento está asociado a los formularios y se desata en el momento que un usuario hace clic
en el botón de reset de un formulario. Javascript 1.1
onselect
onsubmit
Ocurre cuando el visitante apreta sobre el botón de enviar el formulario. Se ejecuta antes del
envío propiamente dicho. Javascript 1.0
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 53 de 81
Desarrollo en Javascript del lado del cliente
onunload
Al abandonar una página, ya sea porque se pulse sobre un enlace que nos lleve a otra página o
porque se cierre la ventana del navegador, se ejecuta el evento onunload. Javascript 1.0
A lo largo de los manuales I y II de Javascript, así como del Taller, hemos mostrado muchos
ejemplos de utilización de los manejadotes de eventos. Aquí veremos ejemplos sencillos que se
nos ocurren para utilizar otros manejadotes que no hemos visto todavía, aunque antes
podemos hacer una lista de algunos ejemplos publicados anteriormente que deberían servir de
ayuda para ir captando la práctica de el manejo de eventos.
Evento onabort
Veamos un primer ejemplo, en este caso sobre el evento onabort. Este evento se activa al
cancelarse la carga de una página, ya sea porque se pulsa el botón de cancelar o porque el
usuario se marcha de la página por otro enlace.
Este ejemplo contiene una imagen que tiene el evento onabort asignado para que se ejecute
una función en caso de que la imagen no llegue a cargarse. La función informa al usuario de
que la imagen no se ha llegado a cargar y le pregunta si desea cargarla otra vez. Si el usuario
contesta que sí, entonces se pone a descargar la imagen otra vez. Si dice que no, no hace nada.
La pregunta se hace con una caja confirm de Javascript.
<html> <head>
<title>Evento onabort</title>
<script>
function preguntarSeguir(){
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 54 de 81
Desarrollo en Javascript del lado del cliente
respuesta = confirm ("Has detenido la carga de la página y hay una imagen que no estás viendo.n¿Deseas cargar la imagen?")
if (respuesta)
document.img1.src = "http://ipaginate.iespana.es/ipaginate/desarrollogrande.gif"
</script>
</head>
<body>
<img name=img1 src="http://ipaginate.iespana.es/ipaginate/desarrollogrande.gif" width=500 height=458 alt="Imagen que pesa 115K" border="0"
onabort="preguntarSeguir()">
<br>
</body>
</html>
Este ejemplo estaría bien si siempre se detuviese la carga por pulsar el botón de cancelar, pero
si lo que pasa es que el usuario ha cancelado por irse a otra página a través de un enlace, saldrá
la caja de confirmación pero no ocurrirá nada independientemente de lo que se responda y el
navegante se marchará irremediablemente a la nueva página.
Si por ejemplo, estamos situados en un campo de texto y nos vamos de dicho campo, ya sea
porque pulsamos con el ratón en otro campo del formulario o en un área vacía, ya sea porque
el usuario a apretado el botón tabulador (Tab) que mueve el foco hasta el siguiente elemento
de la página.
Si yo deseo que, al situarse fuera de un campo de texto, se compruebe que el valor introducido
es correcto puedo utilizar onblur y llamar a una función que compruebe si el dato es correcto.
Si no es correcto puedo obligar al foco de la aplicación a situarse nuevamente sobre el campo
de texto y avisar al usuario para que cambie dicho valor.
Puede ser una manera interesante de asegurarnos que en un campo de texto se encuentra un
valor válido. Aunque tiene alguna pega, como veremos más adelante.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 55 de 81
Desarrollo en Javascript del lado del cliente
Vamos a empezar por un caso sencillo, en el que solamente deseamos comprobar un campo de
texto para asegurarnos que es un número entero.
<html>
<head>
<title>Evento onblur</title>
<script>
function validarEntero(valor){
valor = parseInt(valor)
if (isNaN(valor)) {
return ""
}else{
return valor
function compruebaValidoEntero(){
enteroValidado = validarEntero(document.f1.numero.value)
if (enteroValidado == ""){
//selecciono el texto
document.f1.numero.select()
document.f1.numero.focus()
}else
document.f1.numero.value = enteroValidado
</script>
</head>
<body>
<form name=f1>
</form>
</body>
</html>
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 56 de 81
Desarrollo en Javascript del lado del cliente
Hemos visto en el ejemplo del método onblur relatado anteriormente una posible técnica para
comprobar los datos de un campo de formulario. Ahora vamos a ver cómo evolucionar esta
técnica si tenemos más de un campo a validar, dado que se puede complicar bastante el
problema.
De hecho, antes de leer nuestra solución propuesta, creo que sería un buen ejercicio a realizar
por el lector la práctica de hacer ese mismo ejemplo para dos campos y trabajar un poco con la
página a ver si encontramos algún problema.
Muy probablemente nos encontraremos con un curioso bucle infinito que nos va a dar más de
un quebradero de cabeza para solucionarlo.
En la práctica, el lector puede intentar validar un número entero y un código postal. Para
validar un código postal necesitamos comprobar que es una cadena de texto compuesta por 5
caracteres y todos son enteros, por lo menos para los códigos en España.
Por si alguien lo quiere intentar, la función para validar un código postal sería algo parecido a
esto:
function ValidoCP(){
CPValido=true
if (document.f1.codigo.value.length != 5)
CPValido=false
else{
for (i=0;i<5;i++){
CActual = document.f1.codigo.value.charAt(i)
if (validarEntero(CActual)==""){
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 57 de 81
Desarrollo en Javascript del lado del cliente
CPValido=false
break;
return CPValido
Se puede probar a montar el ejemplo con dos campos... nosotros ahora vamos a dar una
solución al problema bastante complicadilla, ya que incluimos instrucciones para evitar el
efecto del bucle infinito. No vamos a ver el ejemplo que daría el error, lo dejamos para el que
desee intentarlo por si mismo y recomendamos hacerlo porque así comprenderemos mejor el
siguiente código.
<html>
<head>
<title>Evento onblur</title>
<script>
avisado=false
function validarEntero(valor){
valor = parseInt(valor)
if (isNaN(valor)) {
return ""
}else{
return valor
function compruebaValidoEntero(){
enteroValidado = validarEntero(document.f1.numero.value)
if (enteroValidado == ""){
if (!avisado){
//selecciono el texto
document.f1.numero.select()
document.f1.numero.focus()
avisado=true
setTimeout('avisado=false',50)
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 58 de 81
Desarrollo en Javascript del lado del cliente
}else
document.f1.numero.value = enteroValidado
function compruebaValidoCP(){
CPValido=true
if (document.f1.codigo.value.length != 5)
CPValido=false
else{
for (i=0;i<5;i++){
CActual = document.f1.codigo.value.charAt(i)
if (validarEntero(CActual)==""){
CPValido=false
break;
if (!CPValido){
if (!avisado){
//selecciono el texto
document.f1.codigo.select()
//document.f1.codigo.focus()
avisado=true
setTimeout('avisado=false',50)
</script>
</head>
<body>
<form name=f1>
<br>
Escriba un código postal: <input type=text name=codigo size=8 value="" onblur="compruebaValidoCP()"> *espera una cadena con 5 carácteres
numéricos
</form>
</body>
</html>
Este ejemplo sigue la guía del primer ejemplo de onblur de este artículo, incluyendo un nuevo
campo a validar.
Para solucionar el tema del bucle infinito, que habréis podido investigar por vosotros mismos y
en el que se mostraban una caja de alerta tras otra indefinidamente, hemos utilizado una
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 59 de 81
Desarrollo en Javascript del lado del cliente
variable llamada avisado que contiene un true si ya se ha avisado de que el campo estaba mal y
un false si no se ha avisado todavía.
Para restituir la variable avisado a false, de modo que la próxima vez que se escriba mal el
valor se muestre el mensaje correspondiente, se utiliza el método setTimeout, que ejecuta la
instrucción con un retardo, en este caso de 50 milisegundos. Lo suficiente para que no se meta
en un bucle infinito.
Nota: Después de todos los parches que hemos tenido que colocar para que este evento se
comporte correctamente para cumplir el cometido deseado, es posible que no merezca la
pena utilizarlo para este cometido. Podemos hacer uso del evento onchange, o comprobar
todos los campos de una sola vez cuando el usuario ha decidido enviarlo.
Vamos a conocer uno de los trucos más solicitados de Javascript, que tiene mucha relación con
el tema de formularios y donde se utiliza el evento onchange de Javascript. Es un ejemplo
sobre cómo realizar una página con un par de selects donde, según el valor escogido en uno de
ellos, cambien las opciones posibles del otro select.
Lo mejor para ver lo que vamos a hacer es ver una página web donde se muestra en
funcionamiento el script. Para ver su funcionamiento debemos cambiar la selección del primer
select y comprobaremos como las opciones del segundo select cambian automáticamente.
El ejemplo que hemos ilustrado utiliza provincias y países. Al escoger en el primer select un
país, en el segundo debe mostrarnos las provincias de ese país para que escojamos una
provincia, pero sólo una que tenga que esté en el país seleccionado en primer término.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 60 de 81
Desarrollo en Javascript del lado del cliente
Es importante conocer los objetos de formulario select y los option. Los select corresponden
con las cajas de selección desplegables y los option con cada una de las opciones de la caja
desplegable. Podemos ver un artículo que habla de ello.
En concreto nos interesa hacer varias cosas que tienen que ver con extraer el valor de un select
en cualquier momento, fijar su número de opciones y, para cada opción, colocar su valor y su
texto asociado. Todo esto aprenderemos a hacerlo en este ejemplo.
Para empezar, vamos a utilizar un formulario con dos selects, uno para el país y otro para la
provincia.
<form name="f1">
<option value="1">España
<option value="2">Argentina
<option value="3">Colombia
<option value="4">Francia
</select>
<select name=provincia>
<option value="-">-
</select>
</form>
Nos fijamos en el select asociado al país de este formulario que, cuando se cambia la opción de
país, se debe llamar a la función cambia_provincia(). Veremos más adelante esta función,
ahora es importante fijarse que está asociada al evento onchange que se activa cuando cambia
la opción en el select.
Todo lo demás será código Javascript. Empezamos definiendo un montón de arrays con las
provincias de cada país. En este caso tenemos sólo 4 países, entonces necesitaré 4 arrays. En
cada array tengo la lista de provincias de cada país, colocada en cada uno de los elementos del
array. Además, dejaré una primera casilla con un valor "-" que indica que no se ha seleccionado
ninguna provincia.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 61 de 81
Desarrollo en Javascript del lado del cliente
Hay que fijarse que los índices del array de cada país se corresponden con los del select del
país. Por ejemplo, la opción España, tiene el valor asociado 1 y el array con las provincias de
España se llama provincias_1.
El script se completa con una función que realiza la carga de las provincias en el segundo
select. El mecanismo realiza básicamente estas acciones:
La función tiene el siguiente código. Está comentado para que se pueda entender mejor.
function cambia_provincia(){
var pais
pais = document.f1.pais[document.f1.pais.selectedIndex].value
if (pais != 0) {
mis_provincias=eval("provincias_" + pais)
num_provincias = mis_provincias.length
document.f1.provincia.length = num_provincias
for(i=0;i<num_provincias;i++){
document.f1.provincia.options[i].value=mis_provincias[i]
document.f1.provincia.options[i].text=mis_provincias[i]
}else{
document.f1.provincia.length = 1
document.f1.provincia.options[0].value = "-"
document.f1.provincia.options[0].text = "-"
document.f1.provincia.options[0].selected = true
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 62 de 81
Desarrollo en Javascript del lado del cliente
Veamos un ejemplo del evento onunload, que, recordamos, se activa cuando el usuario ha
abandona la página web. Por tanto, onunload sirve para ejecutar una acción cuando el usuario
se marcha de la página, ya sea porque pulsa un enlace que le lleva fuera de la página o porque
cierra la ventana del navegador.
El ejemplo que deseamos mostrar sirve para abrir una página web en otra ventana cuando el
usuario abandona la página. De este modo actúan muchos de los molestos popups de las
páginas web, abriéndose justo cuando abandonamos el sitio que estábamos visitando.
<html>
<head>
<title>Abre al salir</title>
<script>
function abreventana(){
window.open("http://www.google.es","venta","")
</script>
</head>
<body onunload="abreventana()">
<a href="http://www.desarrolloweb.com">DW!!</a>
</body>
</html>
El ejemplo es tan sencillo que casi sobran las explicaciones. Simplemente creamos una función
que abre una ventana secundaria y la asociamos con el evento onunload, que se coloca en la
etiqueta <body>.
Referencia: Si no tenemos una base de Javascript nos vendrá muy bien acceder a nuestra
sección Javascript a fondo.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 63 de 81
Desarrollo en Javascript del lado del cliente
Con el evento onload podemos ejecutar acciones justo cuando se han terminado de cargar
todos los elementos de la página. Es un evento bastante utilizado pues es muy habitual que se
deseen llevar a cabo acciones en ese preciso instante. En nuestro ejemplo vamos a ver cómo
podríamos hacer un script para motivar a nuestros visitantes a que nos voten en un ranking
cualquiera de páginas web.
La idea es que la página se cargue entera y, una vez esté cargada, aparezca una ventana de
Javascript donde se proponga al visitante votar a la página. Es interesante esperar a que
termine de cargar la página entera para que el visitante pueda ver la web que se propone votar,
antes de que realmente le pidamos su voto.
<html>
<head>
<title>Votame!!</title>
<script language="JavaScript">
function pedirVoto(){
window.open("http://www.loquesea.com/votar.php?idvoto=12111","","")
</script>
</head>
<body onload="pedirVoto()">
<h1>Página SuperChula</h1>
<br>
Esta página está muy bonita. Soy su autor y te puedo asegurar que no hay muchas páginas con tanta calidad en Internet
<br>
<br>
<a href="#">Entrar</a>
</body>
</html>
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 64 de 81
Desarrollo en Javascript del lado del cliente
Nos fijamos que en la etiqueta <body> tenemos el evento onload="pedirVoto()". Es decir, que
cuando se cargue la página se llamará a una función llamada pedirVoto(), que hemos definido
en el bloque de script que tenemos en la cabecera.
La función pedirVoto() utiliza una caja confirm para saber si realmente el usuario desea
votarnos. La función confirm() muestra una caja con un texto y dos botones, para aceptar o
cancelar. El texto es lo que se recibe por parámetro. Dependiendo de lo que se pulse en los
botones, la función confirm() devolverá un true, si se apretó el botón aceptar, o un false, en
caso de que se pulsase sobre cancelar.
La función confirm() está a su vez metida dentro de un bloque condicional if, de modo que,
dependiendo de lo que se pulsó en la caja confirm, el if se evaluará como positivo o negativo.
En este caso sólo se realizan acciones si se pulsó sobre aceptar.
Para acceder a la página donde se contabiliza nuestro voto tenemos el método window.open(),
que sirve para abrir ventanas secundarias o popups. Mostramos la página donde se vota en una
ventana secundaria para que el visitante no se marche de nuestra web, ya que acaba de entrar y
no deseamos que se vaya ya.
Con esto queda más o menos ilustrado cómo hacer uso del evento onload. Seguro que en
vuestras creaciones habrá muchos más casos donde utilizarlo.
Cada evento tiene un nombre, por ejemplo "click". Los manejadores eventos, que son usados
para invocar una serie de comandos cuando se produce un evento, tienen siempre la palabra
"on" seguida del nombre del evento. Por ejemplo, "onclick".
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 65 de 81
Desarrollo en Javascript del lado del cliente
Abort (onabort):
Se lanza cuando se abortó la carga de un elemento de la página, por ejemplo una imagen.
Blur (onblur):
Change (onchange):
Click (onclick):
Se lanza cuando el usuario hace clic sobre un elemento de la página, que puede ser un botón,
un enlace, etc.
DblClick (ondblclick):
Este evento es lanzado cuando el usuario hace doble click en un elemento de formulario o un
link.
DragDrop (ondragdrop):
Este evento se produce cuando el usuario arrastra y suelta un objeto en la ventana del
navegador.
Error (onerror):
Focus (onfocus):
KeyDown (onkeydown):
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 66 de 81
Desarrollo en Javascript del lado del cliente
KeyPress (onkeypress):
Se lanza el evento onkeypress cuando el usuario pulsa o mantiene pulsada una tecla.
KeyUp (onkeyup):
Load (onload):
Se ejecuta cuando se termina de cargar la página, o bien todos los frames del conjunto de
FRAMESET.
MouseDown (onmousedown):
MouseMove (onmousemove):
MouseOut (onmouseout):
Se lanza cuando el usuario retira el puntero del ratón. Por ejemplo, si colocamos onmouseout
sobre una imagen, el evento se lanzaría en el momento que el usuario sale con el puntero del
ratón de esa imagen.
MouseOver (onmouseover):
Este evento se desata cuando el usuario mueve el puntero del ratón sobre un elemento.
Imaginemos que colocamos este evento en una imagen, entonces se lanza, una sola vez, en el
momento de entrar con el puntero en el área que ocupa esa imagen.
MouseUp (onmouseup):
Este evento se produce cuando el usuario suelta o deja de apretar el botón del ratón.
Move (onmove):
Reset (onreset):
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 67 de 81
Desarrollo en Javascript del lado del cliente
Resize (onresize):
Se lanza cuando el usuario, o un script, alteran el tamaño de una ventana del navegador o de
un frame.
Select (onselect):
Submit (onsubmit):
Se lanza cuando se aprieta el botón de submitir de un formulario, así que permite ejecutar
código cuando el usuario envía el formulario.
UnLoad (onunload):
Evento que se produce cuando el usuario sale de un documento, osea, al salir de la página web,
ya sea por pulsar un enlace que lleva a otra página o por cerrar la ventana del navegador.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 68 de 81
Desarrollo en Javascript del lado del cliente
Diversos artículos con informaciones interesantes para completar la formación y para saber
por dónde se puede continuar aprendiendo.
Muchos lenguajes de programación utilizan las cláusulas try … catch para cazar errores y
realizar cosas cuando ocurran, por ello, lo que vamos a comentar aquí para Javascript puede
resultar muy familiar a los programadores. Estas cláusulas las podemos utilizar para tratar de
ejecutar una porción de código, que sabemos que podría desatar un error en tiempo de
ejecución.
Con try especificamos una serie de sentencias Javascript que vamos a tratar de ejecutar. Con
catch especificamos lo que queremos realizar si es que se ha cazado un error en el bloque try.
La sintaxis de utilización es la siguiente:
try {
}catch(mierror){
El Bloque try se ejecuta tal cual, hasta que un posible error se ha detectado.
Si no se detecta un error durante la ejecución del bloque try, el catch se deja del lado y
no se realiza.
En caso que sí se detecte un error en el bloque try, se ejecuta las sentencias que
teníamos en el catch.
Si nos fijamos, podemos ver que el bloque catch recibe un dato, que en este caso hemos
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 69 de 81
Desarrollo en Javascript del lado del cliente
try {
funcion_que_no_existe()
}catch(mierror){
Cuando se ejecute el try, se detectará un error, al tratar de ejecutar una función que no existe.
Entonces se ejecutará la cláusula catch, mostrando el error que se ha detectado. Si nos fijamos,
se muestra una descripción del error detectado mediante mierror.description.
Pero la propiedad description del error sólo existe en Internet Explorer. En Firefox, para
mostrar una descripción del error lo hacemos directamente con la variable. Así:
try {
funcion_que_no_existe()
}catch(mierror){
Entonces, para hacer un bloque try … catch como este que funcione en los dos navegadores
deberíamos hacer esto:
try {
funcion_que_no_existe()
}catch(mierror){
if (mierror.description){
}else{
También, dentro de un bloque try, podemos lanzar nosotros mismos una excepción, sin que
tenga por qué haberse producido un error. Esto lo hacemos con la sentencia trow.
try {
catch (e) {
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 70 de 81
Desarrollo en Javascript del lado del cliente
//tratamos la excepción
alert(e);
Este código, válido tanto para Internet Explorer como Firefox, lanza una excepción en el
bloque try. Luego, en el bloque catch, se muestra la excepción que se ha detectado.
Nuestros manuales vienen con explicaciones detalladas sobre Javascript, pero siempre es
bueno tener a mano unas "chuletas", o más dicho de forma más elegante, hojas de referencia
rápida. En éstas se encuentran multitud de nombres de funciones, métodos y distintos usos del
lenguaje, que son repetidos a menudo durante la programación.
En Internet se pueden encontrar diversas hojas de referencia muy útiles, completas y bien
presentadas, que nos pueden ayudar en nuestro día a día con el lenguaje, si las tenemos
impresas en papel y a mano para consulta. Lo bueno es que las ofrecen programadores de
manera gratuita, con lo que podemos verlas y si nos parece que pueden ayudarnos, se pueden
imprimir libremente.
Javascript Quick Reference Card Chuleta de referencia Javascript escrita en dos páginas, con
conceptos bastante básicos sobre estructuras de control, operadores, etc, así como objetos y
métodos.
JavaScript and Browser Objects Quick Reference 8 páginas con un listado de todos los objetos
del navegador y sus propiedades y métodos. Está sacada del libro "Javascript Bible".
Javascript Cheat Sheet: En una sola página se muestran algunas notas sobre sintaxis, los
métodos básicos de Javascript, eventos, los métodos DOM e incluso algunas ayudas sobre
Ajax.
JavaScript in one page No se podría imprimir en una sola página, pero muestra una completa
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 71 de 81
Desarrollo en Javascript del lado del cliente
tabla sobre Javascript, de la que se podría incluso aprender con las escuetas explicaciones.
Referencia Javascript Otra pedazo página-resumen de Javascript, pero que ocupa varias
páginas, con referencia sobre sintaxis, orientación a objetos, así como compatibilidad de
distintos componentes de la tecnología con cada navegador.
Jquery Cheat Sheet Una página con una referencia rápida para los que trabajan con Jquery 1.2.
Ver también esta otra chuleta a color de Jquery.
Chuleta DOM Todos los métodos del DOM de Javascript con rápidas explicaciones.
Si has seguido hasta este punto los manuales de Javascript generales, es decir, el Manual de
Programación en Javascript I y su segunda parte, el Manual de Programación en Javascript II,
estamos seguros que tendrás ya un conocimiento sólido sobre este lenguaje y las posibilidades
básicas de la programación en el cliente.
Sin embargo, tú mismo te puedes preguntar cómo hacer muchas de las cosas que ves en tantas
y tantas páginas web, como interfaces de usuario avanzadas que responden a la interacción con
el visitante, efectos especiales, Ajax, etc. Como podrás comprobar a continuación, todo esto se
puede aprender sin salir de DesarrolloWeb.com y afortunadamente ahora está a tu alcance con
poco esfuerzo adicional.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 72 de 81
Desarrollo en Javascript del lado del cliente
Javascript a fondo
http://www.desarrolloweb.com/javascript/
Taller de Javascript
En el taller de Javascript encontrarás diversos artículos prácticos sobre cómo hacer las cosas
más variadas con Javascript. Puedes tratarlos como prácticas, para aprender a hacer una gama
de utilidades que te darán una base adicional sobre el lenguaje, o puedes consultarlos cuando
tengas que resolver un problema concreto con Javascript.
http://www.desarrolloweb.com/manuales/22/
Tenemos también diversos manuales eminentemente prácticos, sobre aspectos muy concretos
que se utilizan habitualmente en Javascript. En estos manuales detallamos cosas como el
trabajo con imágenes, formularios, frames, ventanas secundarias, etc. Muchas de estas cosas
ya las empezamos a tratar en el presente manual, pero existe una información mucho más
completa que quizás te interese leer llegado el momento.
Frameworks Javascript
Los frameworks son como librerías de código para hacer tareas comunes en páginas web,
creadas por otros programadores y que están a tu disposición para acelerar el proceso de
creación de páginas realmente avanzadas. Digamos que cualquiera de nosotros podría
programar a mano y desde cero cualquiera de las funcionalidades implementadas en los
frameworks, pero ello le ocuparía mucho más tiempo y los resultados lo más probable es que
fueran peores.
Los frameworks son sin duda el paso que diferencia el programador de Javascript básico y el
programador profesional, sin límites más allá de los propios del navegador y su propia
imaginación. Por ello, como te podrás imaginar, recomendamos encarecidamente que
aprendas uno de ellos para realizar aplicaciones web basadas en Javascript realmente
profesionales.
El único problema que podrás encontrar es que utilizar un framework en muchas de las
ocasiones no es una tarea trivial y requiere que el programador tenga bastante habilidad. Sin
embargo, en DesarrolloWeb.com hemos tratado en profundidad algunos de los frameworks
Javascript más populares y estamos seguros que con nuestros manuales podrás aprender todo
lo que necesitas saber para cumplir tus objetivos... y más.
Además, los frameworks solucionan uno de los problemas más grandes que tiene Javascript (si
no el más crucial) y es el hecho de que el lenguaje no es exactamente igual en los diversos
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 73 de 81
Desarrollo en Javascript del lado del cliente
navegadores del mercado y las versiones que han ido saliendo. Por ello, a medida que se
complican las cosas, comprobarás que hay muchas tareas para las cuales tienes que detectar el
navegador que está ejecutando la página y realizar acciones distintas dependiendo de ello. Con
los frameworks este problema se resuelve y nunca más tendrás que preocuparte de que tu
código se ejecute bien en todos los navegadores.
Hablando de librerías Javascript, debemos saber que existen muchas posibilidades que
relatamos en el artículo Listado de los Distintos Frameworks Javascript. En
DesarrolloWeb.com empezamos hace tiempo a explicar algunos de ellos y comenzamos por
uno llamado Cross-browser, pero que realmente no recomendamos, porque se quedó poco
actualizado. Podemos tenerlo en cuenta como un precursor de los frameworks Javascript, pero
que se ha quedado en desuso. Actualmente existen opciones mucho mejores.
Sin lugar a dudas, jQuery es el framework Javascript más popular en estos momentos. A poco
que se aprenda de jQuery se podrá comprobar que es una auténtica delicia para implementar
tanto interactividad como efectos especiales sobre páginas web. Para aprender este framework
tenemos un completo Manual de jQuery que no exageramos si decimos que es uno de los
mejores manuales ya publicados en DesarrolloWeb.com. Además, hemos publicado también
un Taller de jQuery para aprender por la práctica.
Otro de los frameworks populares es Mootools, casi tan bueno como jQuery, pero con sus
particularidades. En mi opinión, resulta un poco más complicado de manejar para ciertos usos,
pero es una gran librería. Para aprender puedes consultar el Manual de Mootools, tratado
también con gran detalle y el Taller de Mootools.
También tenemos un tercer framework en discordia, que nos lo ofrece el equipo de Yahoo!. En
esta ocasión el manual sólo tiene una ligera presentación y explicaciones para empezar a
trabajar, en el Manual de Introducción a YUI.
Videotutoriales de Javascript
Para quien lo prefiera, en el momento de escribir estas líneas estamos publicando varios
materiales para aprender Javascript de una manera más visual. Para ello estamos produciendo
unos videotutoriales que te explicarán cosas sobre el propio lenguaje y alguno de los
frameworks más utilizados. Consulta el Videotutorial de Javascript y el Videotutorial de
jQuery.
En fin, que como se puede comprobar, en DesarrolloWeb.com tienes todo lo que necesitas para
seguir aprendiendo mucho Javascript... Confiamos en que, con un poco de esfuerzo por tu
parte, puedas aprovechar todos los materiales que venimos publicando, para llegar a dominar
este lenguaje y sus diferentes aplicaciones.
En este artículo ni siquiera hemos nombrado todos los manuales existentes sobre Javascript en
este sitio, porque son muchos y algunos de ellos son demasiado específicos. Pero en definitiva,
para estar al tanto de todos los manuales que tenemos y podamos seguir publicando en el
futuro sobre Javascript, te recomendamos echar un vistazo a la sección de Javascript a fondo.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 74 de 81
Desarrollo en Javascript del lado del cliente
Con la llegada de HTML5 al mundo del desarrollo web, la forma de crear aplicaciones web ha
cambiado de manera muy significativa, ahora bien, JAVASCRIPT no es HTML, pero sí es un
elemento de gran importancia para todo lo que significa y se ha logrado con la quinta versión
del lenguaje de etiquetas, donde los desarrolladores tienen a mano nuevos elementos. Estos
son soportados por nuevas o mejoradas APIS JAVASCRIPT. Aunque no podemos olvidar que
la versión tres de CSS ha contribuido en gran medida a una nueva forma versátil y adaptable
de visualizar por parte de los usuarios y a crear aplicaciones web por parte de los
desarrolladores y diseñadores, con una sutileza semántica.
En el presente artículo estudiaremos los diferentes eventos Touch que podemos procesar o
manejar con JAVASCRIPT, además de algunos otros aspectos que son de gran importancia
para desarrollar aplicaciones que requieran manejos de eventos Touch. Es importante decir
que èste es el primero de una serie de artículos, que tienen como fin u objetivo brindar un
esquema de orientación donde veremos brevemente algunos usos que
Los dispositivos táctiles trabajan sin ningún problema en cualquier aplicación web, sus
navegadores móviles hacen que los eventos de ratón como el clic, terminen por convertirse en
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 75 de 81
Desarrollo en Javascript del lado del cliente
un evento Touch, por eso, al hacer una aplicación web, ésta funciona aunque sea procesando
eventos del ratón. Ahora se han agregado a JAVASCRIPT una interesante gama de eventos
Touch, que a pesar de ser solo de tres tipos, podemos hacer una combinación de los mismos, y
así se obtienen mejores resultados. Estos tipos de eventos son:
Son tres eventos, los cuales son muy simples de entender, con ellos obtenemos aplicaciones
web móviles, que sean más dadas a estos entornos táctiles.
Nota: Es importante mencionar que estos tres eventos funcionan en dispositivos Touch,
pero se pueden simular con algún que otro software y también son compatibles con el
sistema Touch presente en el ratón de los MacBook Air de Apple.
Hasta ahora ya sabemos que contamos con tres tipos de eventos Touch, éstos, a su vez, tienen
una serie de elementos que complementan todo el manejo y procesamientos que se generan
tras la interacción de un usuario a través de un dispositivo táctil.
Es importante mencionar que cada evento Touch posee una lista de propiedades en común que
vendrían siendo el complemento del que se hablaba anteriormente. Hay tres propiedades que
están ligadas de forma directa al Touch, que son:
touches: Es una lista de todos toques que se han generado en la pantalla, tiene poca
utilidad y suele ser poco usada.
targetTouches: Éste guarda una lista de la cantidad del evento que se ha generado en
un elemento del DOM.
changedTouches: Éste guarda una lista de todos cambios que se producen hasta
llegar al evento Touch, por ejemplo, en un touchsend puede haber un touchstart y un
touchmove.
Hay otro grupo de propiedades encargado de guardar informacion sobre el evento, las cuales
son:
identifier: Un número único que identifica de forma única cada toque generado
durante una sesión.
target: El elemento del DOM en donde se generó el evento.
client/ page/ screen: Información de la pantalla, relevante sobre acciones que genera
el evento.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 76 de 81
Desarrollo en Javascript del lado del cliente
Los eventos Touch de JAVASCRIPT no cambian para nada el esquema que normalmente se
usa para crear manejadores en este lenguaje, así que para iniciar, no se está hablando de
diferencias a la hora de asignar un manejador de eventos Touch, antes que cambiar los eventos
se han extendido, así que ahora podemos asignar a cualquier elemento del DOM uno o varios
de los tres eventos mencionados algunos párrafos anteriores de éste artículo.
Para facilitar un poco la explicación, veamos algo de código sencillo, iniciaremos por obtener la
referencia a través de métodos del DOM.
Esto no es nada desconocido para los entendidos de JAVASCRIPT, pero si no sabes a cerca del
tema, puedes revisar los manuales de JAVASCRIPT que se encuentran a disposición en
Desarrolloweb.com. Lo que viene a continuación es la asignación del manejador del evento,
además de algunos datos sobre el elemento, como las coordenadas donde se ha llevado a cabo
el toque de pantalla.
elementoTouch.addEventListener('touchstart', function(event){
if (event.targetTouches.length == 1) {
alert(" se ha producido un touchstart en las siguientes cordenas: X " + touch.pageX + " en Y " + touch.pageY);
}, false);
En este caso se está manejando un solo evento. En próximos artículos veremos cómo manejar
varios eventos, capacidad que solo se puede apreciar en dispositivos multi-Touch.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 77 de 81
Desarrollo en Javascript del lado del cliente
En dos artículos ya nos hemos dado por enterado de cómo proceder ante el manejo de eventos
Touch en aplicaciones Web móvil, un mercado que crece cada día. Por tal razón es que estos
dispositivos avanzan de forma acelerada, con un crecimientos abrumador en variedad y
avances de herramientas con las que cuentan teléfonos inteligentes y tabletas, que hacen uso
de pantallas táctiles para la interacción directa con el usuario. La evolución ha llevado a la
concepción de dispositivos multi-Touch, capaces de responder a varios eventos al tiempo, esto
ha abierto la puerta a una nueva generación de aplicaciones que están dirigidas a estos
sofisticados y avanzados dispositivos, y sólo es posible en tabletas y teléfonos inteligentes de
última generación, con sistemas operativos que implementen esta tecnología, pues esta no solo
depende del hardware.
Ante este escenario, JavaScript también se preparó para ser capaz de responder a eventos
mult-Touch, haciéndolo de una forma muy sencilla, tal como se han venido manejando los
eventos Touch en esta serie de artículos, siendo este el tercero, precedido de los artículos "Un
vistazo a los nuevos eventos Touch de JavaScript" y "combinando Eventos Touch de
JavaScript". En este donde se pretende rematar los apuntes finales dedicados de mi parte a los
eventos Touch de JavaScript, veremos cómo hacer objetos arrastrables, haciendo uso de los
eventos Touch, además de cómo procesar múltiples eventos Touch, dirigido a dispositivos
avanzados, pero si tu terminal no tiene soporte multi-Touch, de igual forma el ejemplo
funcionará, solo que con un solo eventos a la vez.
Para engrosar un poco los ejemplos que hemos desarrollado en esta serie de artículos que
hemos dedicado al estudio de los eventos Touch a través del lenguaje de la web JavaScript,
vamos a crear un ejemplo que, aunque muy simple, nos dará a conocer una forma de hacer un
objeto arrastrable. A continuación crearemos un elemento div el cual se podrá mover por la
pantalla gracias al deslizamiento que haga el usuario. Para hacerlo posible vamos a usar el
evento touchmove, haciendo muy fácil la implementación del ejemplo, pero bueno veamos el
código que usamos para lograr eso:
var obj=document.gelElmentById("objArrastrable");
obj.addEventListener('touchmove', function(event){
if (event.targetTouches.length == 1) {
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 78 de 81
Desarrollo en Javascript del lado del cliente
}, false);
Es importante destacar que ese elemento debe tener algunas reglas de estilo CSS, para poder
llevar a feliz término el desarrollo del ejemplo en mención. Inicialmente hay que poner la
posición en absoluta del objeto, de lo contrario no se moverá por la pantalla, también debe
tener en el estilo CSS los atributos que son modificados a través de los métodos del DOM, es
decir, haciendo uso de JavaScript. Como se puede apreciar en el ejemplo, por mi parte hice un
pequeño estilo con el fin de poder llevar a cabo la ejecución del ejemplo, estilo que comparto
con ustedes, aunque no está de más decir que no se hace realmente algo extraordinario.
#objArrastrable{
position: absolute;
width:100px;
height: 100px;
top: 450px;
left: 100px;
Con este simple estilo, lo único que garantizamos es la ejecución del ejemplo y será decisión
tuya si quieres agregar algo más para mejorar de forma visual tus ejemplos o proyectos que
hagan uso de los eventos Touch de JavaScript.
Para quienes hayan aprendido programación Java, quizás hayan podio toparse con un ejemplo
muy famoso: es un pequeño espacio donde, al hacer un arrastre con el ratón, se iba dibujando
un punto. Este ejemplo aparece en un popular libro de programación, donde lo usaban para
enseñar el procesamiento de eventos que se pueden generar con el ratón del ordenador.
Traemos a colación ese viejo recuerdo, pues ahora haremos algo parecido, pero nosotros no
estamos hablando de eventos del ratón de una computadora, sino de eventos Touch de un
dispositivo móvil. Tampoco lo programaremos en Java, sino en JavaScript, usando el elemento
canvas de HTML5.
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 79 de 81
Desarrollo en Javascript del lado del cliente
canvas.addEventListener('touchmove', function(event) {
ctx.beginPath();
ctx.fill();
ctx.stroke();
}, false);
Como se puede apreciar, procesar múltiples eventos es muy sencillo, sólo hay que hacer un
ciclo que itere a través de la lista del objeto touches del evento; de esta forma respondemos a
todos los eventos touchmove generados en el canvas. No está de más recordar que el
funcionamiento de este ejemplo no está garantizado en todos los dispositivos. Su uso está
garantizado en iPad dos, Motorola Xoom, donde se ha probado el funcionamiento de este
ejemplo.
<!DOCTYPE html>
<html lang="es">
<head>
<script>
function inicia(){
var obj=document.getElementById("objArrastrable");
obj.addEventListener('touchmove', function(event){
if (event.targetTouches.length == 1) {
}, false);
canvas.addEventListener('touchmove', function(event) {
ctx.beginPath();
ctx.fill();
ctx.stroke();
}, false);
</script>
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 80 de 81
Desarrollo en Javascript del lado del cliente
<style>
#objArrastrable{
position: absolute;
width:100px;
height: 100px;
top: 450px;
left: 100px;
</style>
</head>
<body onLoad="inicia();">
<div id="objArrastrable">
Objeto arrastrable
</div>
</body>
</html>
http://desarrolloweb.com/manuales/javascript-lado-cliente.html Página 81 de 81