Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
DESARROLLADO POR:
Carlos Andrs Giraldo Hernndez
MDULO:
CONSTRUCCIN DE ELEMENTOS DE SOFTWARE WEB.
Pgina 1 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
2.
3.
Sintaxis ................................................................................................................................. 9
4.
5.
6.
7.
Variables ............................................................................................................................ 12
7.1.
8.
9.
9.1.
9.2.
10.
Pgina 2 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
En lnea: ................................................................................................................................ 42
Embebido: ............................................................................................................................ 44
Archivos externos:............................................................................................................. 47
Selectores (Acceso directo a los nodos). ............................................................ 48
11.
11.1.
getElementsByTagName() ................................................................................... 48
querySelector(): .................................................................................................................. 51
querySelectorAll(): ............................................................................................................. 52
13.
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 4 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
INTRODUCCIN
Para aprovechar esta prometedora plataforma de trabajo ofrecida por los nuevos
navegadores, JavaScript fue expandido en relacin con portabilidad e
integracin. A la vez, interfaces de programacin de aplicaciones (APIs) fueron
incorporadas por defecto en cada navegador para asistir al lenguaje en funciones
elementales. Estas nuevas APIs (como Web Storage, Canvas, y otras) son
interfaces para libreras incluidas en navegadores. La idea es hacer disponible
poderosas funciones a travs de tcnicas de programacin sencillas y
estndares, expandiendo el alcance del lenguaje y facilitando la creacin de
programas tiles para la web.
Pgina 5 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Al igual que con CSS, solo vamos a repasar las tcnicas que necesitamos
entender para implementar los ejemplos de prximos temas. Trabajaremos
sobre temas complejos, pero solo usando un mnimo de cdigo necesario para
aprovechar estas nuevas caractersticas. Si necesita expandir sus conocimientos
sobre este lenguaje, lo invito a investigar este tema con ms profundidad.
Pgina 6 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
1. Etiqueta noscript
Algunos navegadores no disponen de soporte completo de JavaScript, otros
navegadores permiten bloquearlo parcialmente e incluso algunos usuarios
bloquean completamente el uso de JavaScript porque creen que as navegan de
forma ms segura.
En estos casos, es habitual que si la pgina web requiere JavaScript para su
correcto funcionamiento, se incluya un mensaje de aviso al usuario indicndole
que debera activar JavaScript para disfrutar completamente de la pgina. El
siguiente ejemplo muestra una pgina web basada en JavaScript cuando se
accede con JavaScript activado y cuando se accede con JavaScript
completamente desactivado.
Pgina 7 de 98
Fecha elaboracin:
28 de Marzo de
2015
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Elaborado por:
Carlos A. Giraldo H.
La
etiqueta
<noscript>
se
debe
incluir
en
el
interior
de
la
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
palabras
actualmente
reservadas
por
JavaScript
son: break, case, catch, continue, default, delete, do, else, finally, for, functi
on, if,in, instanceof, new, return, switch, this, throw, try, typeof, var, void, whi
le, with.
3. Sintaxis
La sintaxis de un lenguaje de programacin se define como el conjunto de reglas
que deben seguirse al escribir el cdigo fuente de los programas para
considerarse como correctos para ese lenguaje de programacin.
La sintaxis de JavaScript es muy similar a la de otros lenguajes de programacin
como Java y C. Las normas bsicas que definen la sintaxis de JavaScript son
las siguientes:
Pgina 9 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
JavaScript define dos tipos de comentarios: los de una sola lnea y los que
ocupan varias lneas.
Ejemplo de comentario de una sola lnea:
// a continuacin se muestra un mensaje
alert("mensaje de prueba");
Los comentarios de una sola lnea se definen aadiendo dos barras oblicuas (//)
al principio de la lnea.
Ejemplo de comentario de varias lneas:
/* Los comentarios de varias lneas son muy tiles
cuando se necesita incluir bastante informacin
en los comentarios */
alert("mensaje de prueba");
Pgina 10 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
4. Posibilidades y limitaciones
Desde su aparicin, JavaScript siempre fue utilizado de forma masiva por la
mayora de sitios de Internet. La aparicin de Flash disminuy su popularidad,
ya que Flash permita realizar algunas acciones imposibles de llevar a cabo
mediante JavaScript.
Sin embargo, la aparicin de las aplicaciones AJAX programadas con JavaScript
le ha devuelto una popularidad sin igual dentro de los lenguajes de programacin
web.
En cuanto a las limitaciones, JavaScript fue diseado de forma que se ejecutara
en un entorno muy limitado que permitiera a los usuarios confiar en la ejecucin
de los scripts.
De esta forma, los scripts de JavaScript no pueden comunicarse con recursos
que no pertenezcan al mismo dominio desde el que se descarg el script. Los
scripts tampoco pueden cerrar ventanas que no hayan abierto esos mismos
scripts. Las ventanas que se crean no pueden ser demasiado pequeas ni
demasiado grandes ni colocarse fuera de la vista del usuario (aunque los detalles
concretos dependen de cada navegador).
Adems, los scripts no pueden acceder a los archivos del ordenador del usuario
(ni en modo lectura ni en modo escritura) y tampoco pueden leer o modificar las
preferencias del navegador.
Por ltimo, si la ejecucin de un script dura demasiado tiempo (por ejemplo por
un error de programacin) el navegador informa al usuario de que un script est
consumiendo demasiados recursos y le da la posibilidad de detener su ejecucin.
A pesar de todo, existen alternativas para poder saltarse algunas de las
limitaciones anteriores. La alternativa ms utilizada y conocida consiste en firmar
digitalmente el script y solicitar al usuario el permiso para realizar esas acciones.
Pgina 11 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
5. JavaScript y navegadores
Los navegadores ms modernos disponibles actualmente incluyen soporte de
JavaScript hasta la versin correspondiente a la tercera edicin del estndar
ECMA-262.
La mayor diferencia reside en el dialecto utilizado, ya que mientras Internet
Explorer utiliza JScript, el resto de navegadores (Firefox, Opera, Safari,
Konqueror) utilizan JavaScript.
6. JavaScript en otros entornos
La inigualable popularidad de JavaScript como lenguaje de programacin de
aplicaciones web se ha extendido a otras aplicaciones y otros entornos no
relacionados con la web.
Herramientas como Adobe Acrobat permiten incluir cdigo JavaScript en
archivos PDF. Otras herramientas de Adobe como Flash y Flex utilizan
ActionScript, un dialecto del mismo estndar de JavaScript.
Photoshop permite realizar pequeos scripts mediante JavaScript y la versin 6
de Java incluye un nuevo paquete (denominado javax.script) que permite
integrar ambos lenguajes.
Por ltimo, aplicaciones como Yahoo Widgets y el Dashboard de Apple utilizan
JavaScript para programar sus widgets.
7. Variables
Las variables en los lenguajes de programacin siguen una lgica similar a las
variables utilizadas en otros mbitos como las matemticas. Una variable es un
elemento que se emplea para almacenar y hacer referencia a otro valor. Gracias
a las variables es posible crear "programas genricos", es decir, programas que
funcionan siempre igual independientemente de los valores concretos utilizados.
Pgina 12 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
El programa anterior es tan poco til que slo sirve para el caso en el que el
primer nmero de la suma sea el 3 y el segundo nmero sea el 1. En cualquier
otro caso, el programa obtiene un resultado incorrecto.
Sin embargo, el programa se puede rehacer de la siguiente manera utilizando
variables para almacenar y referirse a cada nmero:
numero_1 = 3
numero_2 = 1
resultado = numero_1 + numero_2
Los elementos numero_1 y numero_2 son variables que almacenan los valores
que utiliza el programa. El resultado se calcula siempre en funcin del valor
almacenado por las variables, por lo que este programa funciona correctamente
para cualquier par de nmeros indicado. Si se modifica el valor de las
variables numero_1 y numero_2, el programa sigue funcionando correctamente.
Las variables en JavaScript se crean mediante la palabra reservada var. De esta
forma, el ejemplo anterior se puede realizar en JavaScript de la siguiente
manera:
var numero_1 = 3;
var numero_2 = 1;
var resultado = numero_1 + numero_2;
La palabra reservada var solamente se debe indicar al definir por primera vez la
variable, lo que se denomina declarar una variable. Cuando se utilizan las
variables en el resto de instrucciones del script, solamente es necesario indicar
Pgina 13 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
La variable resultado no est declarada, por lo que JavaScript crea una variable
global (ms adelante se vern las diferencias entre variables locales y globales)
y le asigna el valor correspondiente. De la misma forma, tambin sera correcto
el siguiente cdigo:
Pgina 14 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
numero_1 = 3;
numero_2 = 1;
resultado = numero_1 + numero_2;
Slo puede estar formado por letras, nmeros y los smbolos $ (dlar)
y _ (guin bajo).
var $numero1;
var _$letra;
var $$$otroNumero;
var $_a__$4;
var 1numero;
var numero;1_123;
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
utilizan el carcter
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
la parte decimal:
var iva = 16;
No obstante, a veces las cadenas de texto contienen tanto comillas simples como
dobles. Adems, existen otros caracteres que son difciles de incluir en una
variable de texto (tabulador, ENTER, etc.) Para resolver estos problemas,
JavaScript define un mecanismo para incluir de forma sencilla caracteres
especiales y problemticos dentro de una cadena de texto.
Pgina 16 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Si se quiere incluir...
Se debe incluir...
\n
Un tabulador
\t
\'
\"
\\
De esta forma, el ejemplo anterior que contena comillas simples y dobles dentro
del texto se puede rehacer de la siguiente forma:
var texto1 = 'Una frase con \'comillas simples\' dentro';
Pgina 17 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Un array es una coleccin de variables, que pueden ser todas del mismo tipo o
cada una de un tipo diferente. Su utilidad se comprende mejor con un ejemplo
sencillo: si una aplicacin necesita manejar los das de la semana, se podran
crear siete variables de tipo texto:
var dia1 = "Lunes";
var dia2 = "Martes";
...
var dia7 = "Domingo";
Ahora, una nica variable llamada dias almacena todos los valores relacionados
entre s, en este caso los das de la semana. Para definir un array, se utilizan los
caracteres [ ] (corchetes) para delimitar su comienzo y su final y se utiliza el
carcter , (coma) para separar sus elementos:
var nombre_array = [valor1, valor2, ..., valorN];
Una vez definido un array, es muy sencillo acceder a cada uno de sus elementos.
Cada elemento se accede indicando su posicin dentro del array. La nica
complicacin, que es responsable de muchos errores cuando se empieza a
programar, es que las posiciones de los elementos empiezan a contarse en el 0 y
no en el 1:
var diaSeleccionado = dias[0];
// diaSeleccionado = "Lunes"
Pgina 18 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
7.2. Operadores
Las variables por s solas son de poca utilidad. Hasta ahora, slo se ha visto
cmo crear variables de diferentes tipos y cmo mostrar su valor mediante la
funcin alert(). Para hacer programas realmente tiles, son necesarias otro tipo
de herramientas.
Los operadores permiten manipular el valor de las variables, realizar operaciones
matemticas con sus valores y comparar diferentes variables. De esta forma, los
Pgina 19 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
3;
// numero = 6
Pgina 20 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
// numero = 6
// numero = 4
// numero = 4
// numero = 6
Pgina 21 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
var numero2 = 2;
numero3 = numero1++ + numero2;
// numero3 = 7, numero1 = 6
var numero1 = 5;
var numero2 = 2;
numero3 = ++numero1 + numero2;
// numero3 = 8, numero1 = 6
Pgina 22 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
variable
!variable
true
false
false
true
var cantidad = 0;
vacio = !cantidad;
// vacio = true
cantidad = 2;
vacio = !cantidad;
// vacio = false
// mensajeVacio = true
mensaje = "Bienvenido";
mensajeVacio = !mensaje;
// mensajeVacio = false
Pgina 23 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
AND
La operacin lgica AND obtiene su resultado combinando dos valores booleanos.
El operador se indica mediante el smbolo && y su resultado solamente es true si
los dos operandos son true:
variable1
variable2
true
true
True
true
false
False
false
True
False
false
false
False
valor1 = true;
valor2 = true;
resultado = valor1 && valor2; // resultado = true
OR
La operacin lgica OR tambin combina dos valores booleanos. El operador se
indica mediante el smbolo || y su resultado es true si alguno de los dos
operandos es true:
Pgina 24 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
variable1
variable2
variable1 || variable2
True
True
true
True
false
true
False
True
true
False
false
false
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
7.2.4. Matemticos
JavaScript permite realizar manipulaciones matemticas sobre el valor de las
variables numricas. Los operadores definidos son: suma (+), resta (-),
multiplicacin (*) y divisin (/). Ejemplo:
var numero1 = 10;
var numero2 = 5;
resultado = numero1 / numero2;
// resultado = 2
resultado = 3 + numero1;
// resultado = 13
resultado = numero2 4;
// resultado = 1
Pgina 25 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
// numero1 = numero1 + 3 = 8
numero1 -= 1;
// numero1 = numero1 - 1 = 4
numero1 *= 2;
// numero1 = numero1 * 2 = 10
numero1 /= 5;
// numero1 = numero1 / 5 = 1
numero1 %= 4;
// numero1 = numero1 % 4 = 1
Pgina 26 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
7.2.5. Relacionales
Los operadores relacionales definidos por JavaScript son idnticos a los que
definen las matemticas: mayor que (>), menor que (<), mayor o igual (>=), menor
o igual (<=), igual que (==) y distinto de (!=).
Los operadores que relacionan variables son imprescindibles para realizar
cualquier aplicacin compleja, como se ver en el siguiente captulo de
programacin avanzada. El resultado de todos estos operadores siempre es un
valor booleano:
var numero1 = 3;
var numero2 = 5;
resultado = numero1 > numero2; // resultado = false
resultado = numero1 < numero2; // resultado = true
numero1 = 5;
numero2 = 5;
resultado = numero1 >= numero2; // resultado = true
resultado = numero1 <= numero2; // resultado = true
resultado = numero1 == numero2; // resultado = true
resultado = numero1 != numero2; // resultado = false
// numero1 = 3 y resultado = 3
Pgina 27 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Cuando se utilizan cadenas de texto, los operadores "mayor que" ( >) y "menor
que" (<) siguen un razonamiento no intuitivo: se compara letra a letra
comenzando desde la izquierda hasta que se encuentre una diferencia entre las
dos cadenas de texto. Para determinar si una letra es mayor o menor que otra,
las maysculas se consideran menores que las minsculas y las primeras letras
del alfabeto son menores que las ltimas (a es menor que b, b es menor
que c, A es menor que a, etc.).
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
if(mostrarMensaje) {
alert("Hola Mundo");
}
if(mostrarMensaje == true) {
Pgina 29 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
alert("Hola Mundo");
}
if(!mostrado) {
alert("Es la primera vez que se muestra el mensaje");
}
Pgina 30 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
La condicin anterior est formada por una operacin AND sobre dos variables.
A su vez, a la primera variable se le aplica el operador de negacin antes de
realizar la operacin AND. De esta forma, como el valor de mostrado es false, el
valor !mostrado sera true. Como la variable usuarioPermiteMensajes vale true, el
resultado de !mostrado && usuarioPermiteMensajes sera igual a true && true, por
lo que el resultado final de la condicin del if() sera true y por tanto, se ejecutan
las instrucciones que se encuentran dentro del bloque del if().
8.1.2. Estructura if...else
En ocasiones, las decisiones que se deben realizar no son del tipo "si se cumple
la condicin, hazlo; si no se cumple, no hagas nada". Normalmente las
condiciones suelen ser del tipo "si se cumple esta condicin, hazlo; si no se
cumple, haz esto otro".
Para este segundo tipo de decisiones, existe una variante
estructura if llamada if...else. Su definicin formal es la siguiente:
de
la
if(condicion) {
...
}
else {
...
}
Pgina 31 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
La condicin del if() anterior se construye mediante el operador ==, que es el que
se emplea para comparar dos valores (no confundir con el operador = que se
utiliza para asignar valores). En el ejemplo anterior, si la cadena de texto
Pgina 32 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 33 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
veces++;
}
Pgina 34 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 35 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 36 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
La variable que se indica como indice es la que se puede utilizar dentro del
bucle for...in para acceder a los elementos del array. De esta forma, en la primera
repeticin del bucle la variable i vale 0 y en la ltima vale 6.
Esta estructura de control es la ms adecuada para recorrer arrays (y objetos),
ya que evita tener que indicar la inicializacin y las condiciones del
bucle for simple y funciona correctamente cualquiera que sea la longitud del
array. De hecho, sigue funcionando igual aunque vare el nmero de elementos
del array.
9. rbol de nodos
Una de las tareas habituales en la programacin de aplicaciones web con
JavaScript consiste en la manipulacin de las pginas web. De esta forma, es
habitual obtener el valor almacenado por algunos elementos (por ejemplo los
elementos de un formulario), crear un elemento (prrafos, <div>, etc.) de forma
dinmica y aadirlo a la pgina, aplicar una animacin a un elemento (que
aparezca/desaparezca, que se desplace, etc.).
Todas estas tareas habituales son muy sencillas de realizar gracias a DOM. Sin
embargo, para poder utilizar las utilidades de DOM, es necesario "transformar" la
pgina original. Una pgina HTML normal no es ms que una sucesin de
caracteres, por lo que es un formato muy difcil de manipular. Por ello, los
navegadores web transforman automticamente todas las pginas web en una
estructura ms eficiente de manipular.
Esta transformacin la realizan todos los navegadores de forma automtica y
nos permite utilizar las herramientas de DOM de forma muy sencilla. El motivo
por el que se muestra el funcionamiento de esta transformacin interna es que
condiciona el comportamiento de DOM y por tanto, la forma en la que se
manipulan las pginas.
DOM transforma todos los documentos XHTML en un conjunto de elementos
llamados nodos, que estn interconectados y que representan los contenidos de
las pginas web y las relaciones entre ellos. Por su aspecto, la unin de todos
los nodos se llama "rbol de nodos".
Pgina 37 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Figura 9.1 rbol de nodos generado automticamente por DOM a partir del
cdigo XHTML de la pgina
En el esquema anterior, cada rectngulo representa un nodo DOM y las flechas
indican las relaciones entre nodos. Dentro de cada nodo, se ha incluido su tipo
(que se ver ms adelante) y su contenido.
Pgina 38 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Figura 9.2 Nodos generados automticamente por DOM para una etiqueta
XHTML sencilla
De la misma forma, la siguiente etiqueta XHTML:
<p>Esta pgina es <strong>muy sencilla</strong></p>
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Figura 9.3 Nodos generados automticamente por DOM para una etiqueta
XHTML con otras etiquetas XHTML en su interior
La transformacin automtica de la pgina en un rbol de nodos siempre sigue
las mismas reglas:
Como se puede suponer, las pginas XHTML habituales producen rboles con
miles de nodos. Aun as, el proceso de transformacin es rpido y automtico,
siendo las funciones proporcionadas por DOM (que se vern ms adelante) las
nicas que permiten acceder a cualquier nodo de la pgina de forma sencilla e
inmediata.
Pgina 40 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Document, nodo raz del que derivan todos los dems nodos del rbol.
Element, representa cada una de las etiquetas XHTML. Se trata del nico
nodo que puede contener atributos y el nico del que pueden derivar otros
nodos.
Attr, se define un nodo de este tipo para representar cada uno de los
atributos de las etiquetas XHTML, es decir, uno por cada par atributo=valor.
Text, nodo que contiene el texto encerrado por una etiqueta XHTML.
Pgina 41 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
En lnea:
Esta es una tcnica simple para insertar JavaScript en nuestro documento que
se aprovecha de atributos disponibles en elementos HTML. Estos atributos son
manejadores de eventos que ejecutan cdigo de acuerdo a la accin del usuario.
Pgina 42 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 43 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Embebido:
Para trabajar con cdigos extensos y funciones personalizadas debemos
agrupar los cdigos en un mismo lugar entre etiquetas <script>. El elemento
<script> acta exactamente igual al elemento <style> usado para incorporar
estilos CSS. Nos ayuda a organizar el cdigo en un solo lugar, afectando a los
elementos HTML por medio de referencias.
Del mismo modo que con el elemento <style>, en HTML5 no debemos usar
ningn atributo para especificar lenguaje. Ya no es necesario incluir el atributo
type en la etiqueta <script>. HTML5 asigna JavaScript por defecto.
Por ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Este texto es el ttulo del documento</title>
<script>
function mostraralerta(){
alert('hizo clic!');
}
function hacerclic(){
document.getElementsByTagName('p')[0].onclick=mostraralerta;
}
window.onload=hacerclic;
</script>
</head>
<body>
<div id=principal>
<p>Hacer Clic</p>
<p>No puede hacer Clic</p>
Pgina 44 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
</div>
</body>
</html>
Listado 1-2. JavaScript embebido
Las funciones son llamadas desde la ltima lnea del cdigo usando otro
manejador de eventos (en este caso asociado con la ventana) llamado onload.
Pgina 45 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Puede parecer mucho cdigo y trabajo para reproducir el mismo efecto logrado
por una simple lnea en el ejemplo anterior. Sin embargo, considerando el
potencial de HTML5 y la complejidad alcanzada por JavaScript, la concentracin
del cdigo en un nico lugar y la apropiada organizacin representa una gran
ventaja para nuestras futuras implementaciones y para hacer nuestros sitios web
y aplicaciones fciles de desarrollar y mantener.
valores
encerrados
entre
parntesis
(por
ejemplo,
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Archivos externos:
Los cdigos JavaScript crecen exponencialmente cuando agregamos nuevas
funciones y aplicamos algunas de las APIs mencionadas previamente. Cdigos
embebidos incrementan el tamao de nuestros documentos y los hacen
repetitivos (cada documento debe volver a incluir los mismos cdigos). Para
reducir los tiempos de descarga, incrementar nuestra productividad y poder
distribuir y reusar nuestros cdigos en cada documento sin comprometer
eficiencia, recomendamos grabar todos los cdigos JavaScript en uno o ms
archivos externos y llamarlos usando el atributo src:
Por Ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Este texto es el ttulo del documento</title>
<script src=micodigo.js></script>
</head>
<body>
<div id=principal>
<p>Hacer Clic</p>
<p>No puede hacer Clic</p>
</div>
</body>
</html>
Listado 1-3. Cargando el cdigo desde archivos externos
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
de nuestro sitio web que lo necesite. Desde la perspectiva del usuario, esta
prctica reduce tiempos de descarga y acceso a nuestro sitio web, mientras que
para nosotros simplifica la organizacin y facilita el mantenimiento.
Hgalo usted mismo: Copie el cdigo del Listado 1-3 dentro del archivo
HTML previamente creado. Cree un nuevo archivo de texto vaco llamado
micodigo.js y copie en su interior el cdigo JavaScript del Listado 1-2. Tenga
en cuenta que solo el cdigo entre las etiquetas <script> debe ser copiado,
sin incluir las etiquetas mismas.
11. Selectores (Acceso directo a los nodos).
11.1.
getElementsByTagName()
El valor que se indica delante del nombre de la funcin (en este caso, document)
es el nodo a partir del cual se realiza la bsqueda de los elementos. En este
caso, como se quieren obtener todos los prrafos de la pgina, se utiliza el
valor document como punto de partida de la bsqueda.
El valor que devuelve la funcin es un array con todos los nodos que cumplen la
condicin de que su etiqueta coincide con el parmetro proporcionado. El valor
devuelto es un array de nodos DOM, no un array de cadenas de texto o un array
de objetos normales. Por lo tanto, se debe procesar cada valor del array de la
forma que se muestra en las siguientes secciones.
Pgina 48 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
11.2. getElementsByName()
La funcin getElementsByName() es similar a la anterior, pero en este caso se
buscan los elementos cuyo atributo name sea igual al parmetro proporcionado.
En el siguiente ejemplo, se obtiene directamente el nico prrafo con el nombre
indicado:
var parrafoEspecial = document.getElementsByName("especial");
<p name="prueba">...</p>
<p name="especial">...</p>
<p>...</p>
Normalmente el atributo name es nico para los elementos HTML que lo definen,
por lo que es un mtodo muy prctico para acceder directamente al nodo
deseado. En el caso de los elementos HTML radiobutton, el atributo name es
comn a todos los radiobutton que estn relacionados, por lo que la funcin
devuelve una coleccin de elementos.
Pgina 49 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Internet Explorer 6.0 no implementa de forma correcta esta funcin, ya que slo
la tiene en cuenta para los elementos de tipo <input> y <img>. Adems, tambin
tiene en consideracin los elementos cuyo atributo id sea igual al parmetro de
la funcin.
11.3. getElementById()
La funcin getElementById() es la ms utilizada cuando se desarrollan
aplicaciones web dinmicas. Se trata de la funcin preferida para acceder
directamente a un nodo y poder leer o modificar sus propiedades.
La funcin getElementById() devuelve el elemento XHTML cuyo
atributo id coincide con el parmetro indicado en la funcin. Como el
atributo id debe ser nico para cada elemento de una misma pgina, la funcin
devuelve nicamente el nodo deseado.
var cabecera = document.getElementById("cabecera");
<div id="cabecera">
<a href="/" id="logo">...</a>
</div>
Como vimos anteriormente, los elementos HTML tienen que ser referenciados
desde JavaScript para ser afectados por el cdigo. Si recuerda de previos
captulos, CSS, y especialmente CSS3, ofrece un poderoso sistema de
Pgina 50 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
querySelector():
Este mtodo devuelve el primer elemento que coincide con un selector
CSS especificado (s) en el documento. Los selectores son declarados usando
comillas y la misma sintaxis CSS, como en el siguiente ejemplo:
Nota: El mtodo querySelector () slo devuelve el primer elemento que coincida
con los selectores especificados. Para devolver todos los nodos que concuerdan
con la bsqueda, utilice el querySelectorAll () mtodo en su lugar.
function hacerclic(){
document.querySelector(#principal p:first-child).
onclick=mostraralerta;
}
function mostraralerta(){
alert('hizo clic!');
}
window.onload=hacerclic;
Listado 2-1. Usando querySelector().
Pgina 51 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Debido a que ya explicamos que este mtodo solo retorna el primer elemento
encontrado, probablemente notar que la pseudo clase first-child es
redundante.
Obtener el primer elemento <p> en el documento:
document.querySelector("p");
querySelectorAll():
En lugar de uno, el mtodo querySelectorAll() retorna todos los elementos que
concuerdan con el grupo de selectores declarados entre parntesis. El valor
retornado es un arreglo (array) conteniendo cada elemento encontrado en el
orden en el que aparecen en el documento.
function hacerclic(){
Pgina 52 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 53 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Usando esta tcnica podemos ver qu precisos pueden ser estos mtodos.
Podemos combinarlos en una misma lnea y luego realizar una segunda
seleccin con otro mtodo para alcanzar elementos dentro de los primeros. En
prximos captulos estudiaremos algunos ejemplos ms.
Pgina 54 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Descripcin
onblur
Deseleccionar el elemento
onchange
onclick
ondblclick
Evento
Pgina 55 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Descripcin
onfocus
Seleccionar un elemento
onkeydown
Elementos de formulario
y <body>
onkeypress
Elementos de formulario
y <body>
onkeyup
Elementos de formulario
y <body>
onload
<body>
onmousedown
onmousemove
Mover el ratn
onmouseout
onmouseover
Evento
Pgina 56 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Evento
Descripcin
onmouseup
onreset
<form>
onresize
Se ha modificado el tamao de la
ventana del navegador
<body>
onselect
Seleccionar un texto
<input>, <textarea>
onsubmit
Enviar el formulario
<form>
onunload
<body>
Pgina 57 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Las acciones tpicas que realiza un usuario en una pgina web pueden dar lugar
a una sucesin de eventos. Al pulsar por ejemplo sobre un botn de tipo <input
type="submit"> se desencadenan los eventos onmousedown, onclick,
onmouseup y onsubmit de forma consecutiva.
Un evento de JavaScript por s mismo carece de utilidad. Para que los eventos
resulten tiles, se deben asociar funciones o cdigo JavaScript a cada evento.
De esta forma, cuando se produce un evento se ejecuta el cdigo indicado, por
lo que la aplicacin puede responder ante cualquier evento que se produzca
durante su ejecucin.
Las funciones o cdigo JavaScript que se definen para cada evento se
denominan "manejador de eventos" y como JavaScript es un lenguaje muy
flexible, existen varias formas diferentes de indicar los manejadores:
Manejadores "semnticos".
En este mtodo, se definen atributos XHTML con el mismo nombre que los
eventos que se quieren manejar. El ejemplo anterior slo quiere controlar el
Pgina 58 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
evento de pinchar con el ratn, cuyo nombre es onclick. As, el elemento XHTML
para el que se quiere definir este evento, debe incluir un atributo llamado onclick.
El contenido del atributo es una cadena de texto que contiene todas las
instrucciones JavaScript que se ejecutan cuando se produce el evento. En este
caso, el cdigo JavaScript es muy sencillo (alert('Gracias por pinchar');), ya
que solamente se trata de mostrar un mensaje.
En este otro ejemplo, cuando el usuario pincha sobre el elemento <div> se
muestra un mensaje y cuando el usuario pasa el ratn por encima del elemento,
se muestra otro mensaje:
<div onclick="alert ('Has pinchado con el ratn');" onmouseover="alert('A
cabas de pasar el ratn por encima');">
Puedes pinchar sobre este elemento o simplemente pasar el ratn por encim
a</div>
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Cuando el usuario pasa el ratn por encima del <div>, el color del borde se
muestra de color negro. Cuando el ratn sale del <div>, se vuelve a mostrar el
borde con el color gris claro original.
Elemento <div> original:
<div id="contenidos" style="width:150px; height:60px; border:thin solid s
ilver">
Seccin de contenidos...
</div>
Pgina 60 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 61 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
function resalta(elemento) {
switch(elemento.style.borderColor) {
case 'silver':
case 'silver silver silver silver':
case '#c0c0c0':
elemento.style.borderColor = 'black';
break;
case 'black':
case 'black black black black':
case '#000000':
elemento.style.borderColor = 'silver';
break;
}
}
<div style="width:150px; height:60px; border:thin solid silver" onmouseov
er="resalta(this)" onmouseout="resalta(this)">
Seccin de contenidos...
</div>
Pgina 62 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
A continuacin, se utiliza una propiedad del elemento con el mismo nombre que
el evento que se quiere manejar. En este caso, la propiedad es onclick:
document.getElementById("pinchable").onclick = ...
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 65 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
El mtodo addEventListener():
El mtodo addEventListener() es la tcnica ideal y la que es considerada como
estndar por la especificacin de HTML5. Este mtodo tiene tres argumentos: el
nombre del evento, la funcin a ser ejecutada y un valor booleano (falso o
verdadero) que indica cmo un evento ser disparado en elementos
superpuestos.
Por ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Este texto es el ttulo del documento</title>
<script>
function mostraralerta(){
alert('hizo clic!');
}
function hacerclic(){
var elemento=document.getElementsByTagName('p')[0];
elemento.addEventListener(click, mostraralerta, false);
}
window.addEventListener(load, hacerclic, false);
</script>
</head>
<body>
<div id=principal>
<p>Hacer Clic</p>
<p>No puede hacer Clic</p></div>
</body>
</html>
Listado 3-1. Agregando escuchas para eventos con addEventListener().
El Listado 3-1 presenta el mismo cdigo que el Listado 1-2 pero ahora una
escucha fue agregada para cada evento usando el mtodo addEventListener().
Para organizar el cdigo en la funcin hacerclic(), asignamos la referencia del
Pgina 66 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Incluso cuando los resultados de aplicar esta tcnica y la anterior son similares,
addEventListener() nos permite agregar tantas escuchas como necesitemos
para el mismo elemento. Esta distincin le otorga a addEventListener() una
ventaja sobre el resto, convirtindola en la tcnica ideal para aplicaciones
HTML5.
Debido a que los eventos son la clave para sitios webs y aplicaciones
interactivas, varios fueron agregados en la especificacin de HTML5. En
Pgina 67 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 68 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
En un entorno tan cambiante como el diseo web, es muy difcil confiar en que
el orden de los formularios se mantenga estable en una pgina web. Por este
motivo, siempre debera evitarse el acceso a los formularios de una pgina
mediante el array document.forms.
Una forma de evitar los problemas del mtodo anterior consiste en acceder a los
formularios de una pgina a travs de su nombre (atributo name) o a travs de
su atributo id. El objeto document permite acceder directamente a cualquier
formulario mediante su atributo name:
var formularioPrincipal = document.formulario;
var formularioSecundario = document.otro_formulario;
<form name="formulario" >
...
</form>
<form name="otro_formulario" >
...
</form>
Pgina 69 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 70 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Por ltimo, los eventos ms utilizados en el manejo de los formularios son los
siguientes:
Pgina 71 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
<textarea id="parrafo"></textarea>
var valor = document.getElementById("parrafo").value;
Radiobutton
Cuando se dispone de un grupo de radiobuttons, generalmente no se quiere
obtener el valor del atributo value de alguno de ellos, sino que lo importante es
conocer cul de todos los radiobuttons se ha seleccionado. La
propiedad checked devuelve true para el radiobutton seleccionado y false en
cualquier otro caso. Si por ejemplo se dispone del siguiente grupo
de radiobuttons:
<input type="radio" value="si" name="pregunta" id="pregunta_si"/> SI
<input type="radio" value="no" name="pregunta" id="pregunta_no"/> NO
<input type="radio" value="nsnc" name="pregunta" id="pregunta_nsnc"/> NS/
NC
Checkbox
Los elementos de tipo checkbox son muy similares a los radiobutton, salvo que
en este caso se debe comprobar cada checkbox de forma independiente del
resto. El motivo es que los grupos de radiobutton son mutuamente excluyentes
y slo se puede seleccionar uno de ellos cada vez. Por su parte, los checkbox se
pueden seleccionar de forma independiente respecto de los dems.
Si se dispone de los siguientes checkbox:
<input type="checkbox" value="condiciones" name="condiciones" id="condici
ones"/> He ledo y acepto las condiciones
Pgina 72 de 98
Fecha elaboracin:
28 de Marzo de
2015
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Elaborado por:
Carlos A. Giraldo H.
Select
Las listas desplegables (<select>) son los elementos en los que es ms difcil
obtener su valor. Si se dispone de una lista desplegable como la siguiente:
<select id="opciones" name="opciones">
<option value="1">Primer valor</option>
<option value="2">Segundo valor</option>
<option value="3">Tercer valor</option>
<option value="4">Cuarto valor</option>
</select>
desplegable y que contiene la referencia a todas las opciones de esa lista. De esta
forma,
la
primera
opcin
de
una
lista
se
puede
obtener
mediante document.getElementById("id_de_la_lista").options[0].
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 74 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
opcin del array options (y los arrays empiezan a contar los elementos en el
nmero 0).
Establecer el foco en un elemento
En programacin, cuando un elemento est seleccionado y se puede escribir
directamente en el o se puede modificar alguna de sus propiedades, se dice que
tiene el foco del programa.
Si un cuadro de texto de un formulario tiene el foco, el usuario puede escribir
directamente en el sin necesidad de pinchar previamente con el ratn en el
interior del cuadro. Igualmente, si una lista desplegable tiene el foco, el usuario
puede seleccionar una opcin directamente subiendo y bajando con las flechas
del teclado.
Al pulsar repetidamente la tecla TABULADOR sobre una pgina web, los
diferentes elementos (enlaces, imgenes, campos de formulario, etc.) van
obteniendo el foco del navegador (el elemento seleccionado cada vez suele
mostrar un pequeo borde punteado).
Si en una pgina web el formulario es el elemento ms importante, como por
ejemplo en una pgina de bsqueda o en una pgina con un formulario para
registrarse, se considera una buena prctica de usabilidad el asignar
automticamente el foco al primer elemento del formulario cuando se carga la
pgina.
Para asignar el foco a un elemento de XHTML, se utiliza la funcin focus(). El
siguiente ejemplo asigna el foco a un elemento de formulario cuyo atributo id es
igual a primero:
document.getElementById("primero").focus();
<form id="formulario" action="#">
<input type="text" id="primero" />
</form>
Pgina 75 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 76 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
El botn del ejemplo anterior est definido mediante un botn de tipo <input
type="button" />, ya que el cdigo JavaScript mostrado no funciona
Pgina 77 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 78 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
las veces que se pulsen las teclas y no importa la tecla pulsada, ese textarea no
permitir escribir ningn carcter.
Aprovechando esta caracterstica, es sencillo limitar el nmero de caracteres que
se pueden escribir en un elemento de tipo textarea: se comprueba si se ha
llegado al mximo nmero de caracteres permitido y en caso afirmativo se evita
el comportamiento habitual del evento y por tanto, los caracteres adicionales no
se aaden al textarea:
function limita(maximoCaracteres) {
var elemento = document.getElementById("texto");
if(elemento.value.length >= maximoCaracteres ) {
return false;
}
else {
return true;
}
}
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Igualmente, en algunos casos puede ser til impedir que el usuario introduzca
nmeros en un cuadro de texto. Utilizando el evento onkeypress y unas cuantas
sentencias JavaScript, el problema se resuelve fcilmente:
function permite(elEvento, permitidos) {
// Variables que definen los caracteres permitidos
var numeros = "0123456789";
var caracteres = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX
YZ";
var numeros_caracteres = numeros + caracteres;
var teclas_especiales = [8, 37, 39, 46];
// 8 = BackSpace, 46 = Supr, 37 = flecha izquierda, 39 = flecha derecha
Pgina 80 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
// Slo nmeros
<input type="text" id="texto" onkeypress="return permite(event, 'num')" /
>
// Slo letras
<input type="text" id="texto" onkeypress="return permite(event, 'car')" /
>
Pgina 81 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Validacin
La principal utilidad de JavaScript en el manejo de los formularios es la validacin
de los datos introducidos por los usuarios. Antes de enviar un formulario al
servidor, se recomienda validar mediante JavaScript los datos insertados por el
usuario. De esta forma, si el usuario ha cometido algn error al rellenar el
formulario, se le puede notificar de forma instantnea, sin necesidad de esperar
la respuesta del servidor.
Notificar los errores de forma inmediata mediante JavaScript mejora la
satisfaccin del usuario con la aplicacin (lo que tcnicamente se conoce
como "mejorar la experiencia de usuario") y ayuda a reducir la carga de
procesamiento en el servidor.
Pgina 82 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 83 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
...
else if (condicion que debe cumplir el ltimo campo del formulario) {
// Si no se cumple la condicion...
alert('[ERROR] El campo debe tener un valor de...');
return false;
}
// Si el script ha llegado a este punto, todas las condiciones
// se han cumplido, por lo que se devuelve el valor true
return true;
}
Pgina 84 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 85 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
// false
isNaN("3");
// false
isNaN(3.3545);
// false
isNaN(32323.345);
// false
isNaN(+23.2);
// false
isNaN("-23.2");
// false
Pgina 86 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
isNaN("23a");
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
// true
isNaN("23.43.54"); // true
Pgina 87 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
La funcin Date(ano, mes, dia) es una funcin interna de JavaScript que permite
construir fechas a partir del ao, el mes y el da de la fecha. Es muy importante
tener en cuenta que el nmero de mes se indica de 0 a 11, siendo 0 el mes de
Enero y 11 el mes de Diciembre. Los das del mes siguen una numeracin
diferente, ya que el mnimo permitido es 1 y el mximo 31.
La validacin consiste en intentar construir una fecha con los datos
proporcionados por el usuario. Si los datos del usuario no son correctos, la fecha
no se puede construir correctamente y por tanto la validacin del formulario no
ser correcta.
Pgina 88 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
El siguiente script considera que un nmero de telfono est formado por nueve
dgitos consecutivos y sin espacios ni guiones entre las cifras:
valor = document.getElementById("campo").value;
if( !(/^\d{9}$/.test(valor)) ) {
return false;
}
Expresin regular
Formato
900900900
/^\d{9}$/
9 cifras seguidas
900-900900
/^\d{3}-\d{3}-\d{3}$/
9 cifras agrupadas de 3 en 3 y
separadas por guiones
900 900900
/^\d{3}\s\d{6}$/
/^\d{3}\s\d{2}\s\d{2}\s\d{2}$/
/^\(\d{3}\)\s\d{6}$/
900 90 09
00
(900)
900900
Pgina 90 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Nmero
+34
900900900
Expresin regular
/^\+\d{2,3}\s\d{9}$/
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Formato
Si se trata de comprobar que todos los checkbox del formulario han sido
seleccionados, es ms fcil utilizar un bucle:
formulario = document.getElementById("formulario");
for(var i=0; i<formulario.elements.length; i++) {
var elemento = formulario.elements[i];
if(elemento.type == "checkbox") {
if(!elemento.checked) {
return false;
}
}
}
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Otras utilidades
Adems de los formularios y de todas las funciones y utilidades de JavaScript
que se han visto, existen muchas otras utilidades que es necesario conocer para
desarrollar aplicaciones completas. Como no es posible estudiar todas las
herramientas que se pueden crear con JavaScript, a continuacin se muestran
algunas de las utilidades bsicas ms comunes.
Pgina 92 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Este primer reloj construido presenta muchas diferencias respecto al reloj que se
quiere construir. En primer lugar, muestra ms informacin de la necesaria.
Adems, su valor no se actualiza cada segundo, por lo que no es un reloj muy
prctico.
Pgina 93 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
El objeto Date() proporciona unas funciones muy tiles para obtener informacin
sobre la fecha y la hora. Concretamente, existen funciones que devuelven la
hora, los minutos y los segundos:
var fechaHora = new Date();
var horas = fechaHora.getHours();
var minutos = fechaHora.getMinutes();
var segundos = fechaHora.getSeconds();
document.getElementById("reloj").innerHTML = horas+':'+minutos+':'+segund
os;
En HTML
<div id="reloj" />
Si la hora, minuto o segundo son menores que 10, JavaScript no aade el 0 por
delante, por lo que el resultado no es del todo satisfactorio. El siguiente cdigo
soluciona este problema aadiendo un 0 cuando sea necesario:
var fechaHora = new Date();
var horas = fechaHora.getHours();
var minutos = fechaHora.getMinutes();
var segundos = fechaHora.getSeconds();
if(horas < 10) { horas = '0' + horas; }
if(minutos < 10) { minutos = '0' + minutos; }
if(segundos < 10) { segundos = '0' + segundos; }
document.getElementById("reloj").innerHTML = horas+':'+minutos+':'+segund
os;
Pgina 94 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
En HTML
<div id="reloj" />
Para completar el reloj, slo falta que se actualice su valor cada segundo. Para
conseguirlo, se deben utilizar unas funciones especiales de JavaScript que
Pgina 95 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
En HTML
<div id="reloj" />
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
setInterval(nombreFuncion, milisegundos);
En HTML
<div id="reloj" />
Pgina 97 de 98
TUTORIAL BSICO DE
JAVASCRIPT
Construccin de Elementos de
Software Web
Fecha elaboracin:
28 de Marzo de
2015
Elaborado por:
Carlos A. Giraldo H.
Pgina 98 de 98