Ud 3
Ud 3
Ud 3
1. Introducción.
Con los conocimientos de los módulos anteriores podríamos realizar nuestras aplicacio-
nes web, sabríamos usar los elementos HTML5 y le aplicaríamos un diseño concreto a nuestra
web, usando CSS3. Pero en determinadas ocasiones necesitamos realizar un procesamiento aún
más avanzado de las etiquetas de HTML y la aplicación web en general.
<script type="text/javascript">
function muestraVentana() {
</script>
Con JavaScript, suplíamos la interacción con el usuario gracias a que podemos procesar
mucha información en el navegador del cliente, para ello teníamos el DOM (Document Object
Model) que trabaja la página web como un conjunto de objetos (etiquetas) que se iban selec-
cionando y modificando. El problema que existía con este modelo, era que JavaScript no podía
interactuar con el servidor directamente, sino que en determinadas ocasiones teníamos que
mandar una petición al servidor, esperar que el servidor nos devuelva una respuesta y mostrar
los datos, por ejemplo para saber si un usuario y contraseña son correctos en el sistema. Debido
a que este tráfico generado no era muy eficiente, ya que el usuario que se ha logueado tiene
que cargar toda la página entera (con las imágenes, textos, etc), ¿qué se hacía? Se empezó a usar
AJAX (Asynchronous JavaScript and XML), que precisamente nos permitía hacer eso entre otras
muchas cosas.
Posteriormente a JavaScript y a AJAX nació jQuery, creado por John Resig, y el se centró
en la interacción entre el DOM, JavaScript, AJAX, HTML y CSS. Para ello creo un framework libre
M3. JQUERY
y Open Source.
2. JavaScript y jQuery.
JavaScript accedía a los elementos del DOM para interactuar con ellos, si teníamos la
siguiente etiqueta:
getElementById:
getElementByName:
getElementByTagName.
311
Cogeríamos el elemento con el nombre buscado, p.e. tag="div".
Como supongo habrás supuesto, depende del navegador puede ser que tenga una es-
tructura concreta del DOM, ya que cada browser ha intentado sacar novedades y modificacio-
nes, pero todos los navegadores deben respetar este diseño de DOM:
https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction
El problema surge cuando el diseñador quiere acceder mediante a JavaScript a los atri-
butos y otras propiedades de estilo, acción que con jQuery se puede acceder de una forma muy
sencilla a todo usando el selector correcto.
Aula Mentor
jQuery sería una versión avanzada para tratar las páginas web, usando como lenguaje
JavaScript, haciendo más dinámica la interacción con el documento, que además, gracias a todo
el desarrollo que hay detrás cada vez más jQuery se está volviendo más compatible con el resto
de navegadores.
3.1. Definición.
<head>
….
….
<script type="text/javascript">
312
// Código JavaScript
</script>
</head>
O también podemos hacer igual que hacíamos con nuestros archivos CSS y enlazarlos
("linkarlos") a un archivo externo donde estén los script de JavaScript, una buena forma sería
crearnos una carpeta llamada js y agregar en el interior nuestros script. Posteriormente debemos
recordar que debemos llamarlos desde el <head></head> de nuestro documento, por ejemplo
si el archivo que contiene nuestro script se llama miarchivo.js y está alojado dentro de la carpeta
js podíamos crear el siguiente enlace:
<head>
….
….
</head>
M3. JQUERY
3.2. Variables.
Cuando estamos programando vamos a necesitar poder definir variables, en ellas vamos
a definir diferentes formatos: un valor numérico entero (1, 2,3…) un valor numérico decimal o
float (1.2, 3.4, 5.5...etc), un valor de texto ("texto y palabras…"), un valor booleano (verdadero
o falso, true o false), otras variables, etc.
Para definir una variable en JavaScript no es necesario definir el tipo, ya que la misma
variable puede tomar en un momento dado del programa un valor numérico, otro de texto o
nulo. Las definiciones de variables se hacen así:
Ejemplos:
…etc.
Además, estas variables tendrán un nombre único, el cual debemos definir intentando
facilitar la comprensión del código. Por ejemplo si me creo una función que cada vez que el 313
usuario haga click en el ratón me salte un contador, y éste va incrementando en uno en cada
interacción, lo más normal sería llamar a esa variable declarada:
var contador = 1;
var a = 2;
var b = 5;
var c = 7;
var operacion1 = a + b * c;
var operacion2 = (a + b) * c;
3.3. Funciones.
Las funciones o function van a ser bloques de código que van a realizar alguna acción
y una vez finalice puede devolver un resultado o simplemente ejecutarse. Si recordamos en el
ejercicio 3 de la unidad 2 abríamos una ventana usando el siguiente código:
<script type="text/javascript">
function muestraVentana() {
</script>
<script type="text/javascript">
return miSuma;
</script>
return miSuma;
console.log(resultadoSuma(5,4));
En JavaScript podemos crear programas para resolver nuestro algoritmos, y para ello,
debemos pensar que al igual que nosotros si tuvieramos que usar un papel y un boli, tenemos
que tener unos signos para poder realizar operaciones matemáticas, éstos son los operadores
básicos que disponemos en JavaScript:
317
Es una forma muy simplificada de la metodología de la programación, pero para empe-
zar está bien. Analicemos este diagrama de flujo:
Inicio:
Cuando inicia el programa, puede ser cuando hacemos una llamada a la función.
Parámetros de entrada:
En algunas ocasiones tendremos 1 o varios parámetros de entrada con los que nuestro
algoritmo operará.
Sentencias condicional:
Cuando en el programa nos encontramos con una toma de decisiones según un pará-
metro usamos una sentencia if – else. En el ejemplo estaría representada por el rombo y la
pregunta, ¿es A=B?, y según si es verdad esta pregunta (true) o si es falsa (false) se tomará una
decisión u otra.
En programación es una de las sentencias más usadas, siempre se pregunta sobre los
parámetros o condiciones exactas del programas. En JavaScript al igual que en el 98% de los
lenguajes se realiza con las sentencias if - else:
Aula Mentor
if (condición){
}else{
También se pueden volver hacer nuevas preguntas y encadenar estas sentencias las ve-
ces que necesitemos, usando la sentencia else if por ejemplo:
if (condición1){
318
//Acciones a realizar si la condición es verdadera
}else if(condición2){
if(a=b){
}else if (a<b){
}else{
M3. JQUERY
Para ello JavaScript, y la mayoría de los lenguajes nos ofrecen tres formas de ejecutar un
código un número de veces:
for
//acciones a realizar
Si nos fijamos en nuestro ejemplo, tenemos una expresión incial que es varC = 10, ini-
ciamos a 10 el contador, posteriormente preguntamos si cumple la condición ¿es varC=0?, y 319
miestras que no sea 0 vamos haciendo nuestras acciones, en nuestro caso sumar el valor del
contador, más el valor de la variable varC. Ésto se podría representar de la siguiente forma:
varD+= varC
Este ejemplo iría restando varC hasta llegar a varC = 0, cuando se cumpla la condición,
dejaría de utilizarse y pasaría a la siguiente rama. Normalmente, si ves código fuente de algún
lenguage, verás que casi siempre utilizan una variable para hacer los bucles, i o j, el nombre
es realmente lo de menos, pero lo que si se hace es declarar un nombre que sea sólo para los
bucles y una vez termine el bucle se elimina automáticamente, ésto es por el ámbito de las va-
riables que veremos en el apartado siguiente:
//Decrementando el valor de i
varD+= varC
}
Aula Mentor
//Aumentando el valor de i
varD+= varC
//Hay que darse cuenta que usamos " , " para las expresión inicial y " ; " para el siguiente bloque.
varD+= varC
while
Los bucles while es similar a la anterior, es más, siempre podemos elegir for o while
mientras se elija bien las expresiones iniciales y las condiciones finales, para ello debemos de-
clarar la expresion incial antes de la condición, la traducción de while y el uso sería:
320 mientras(condición){
//Acciones a realizar
En determinadas situaciones va a ser más conveniente usar while, podríamos decir que
el for, leyendo la cabecera sabemos el número de veces que se va a ejecutar el bloque, y while
estaría más indicado cuando no sabemos cuántas veces se va a ejecutar pero sí sabes cuando va
a salir del bucle, por ejemplo:
mientras(temperatura != valorSalida){
//Acciones a realizar
sube_temperatura;
else
baja_temperatura;
M3. JQUERY
Si te fijas después del if no he usado las llaves para abrir " { " y cerrar " } " ya que cuando
sólo hay una sentencia se puede omitir, mi consejo, por ahora, usarlo siempre para evitar erro-
res, y conforme te encuentres más cómodo programando ve haciendo pruebas.
var varC=10;
varD+=varC;
do-while
Los bucles do-while son muy parecidos a los bucles while, sólo que con este tipo de
bucle nos aseguramos que al menos ejecutamos una vez nuestro conjunto de acciones ya que
la condición la comprobamos al final y no al inicio.
do{
//Acciones a realizar
}while(condicion) 321
var varC=0;
do{
alert('Hola voy abrir una ventana al inicio y si todo va bien no aparezco más');
}while(varC > 0)
Si te fijas antes de ejecutar el bucle, sabíamos que la condicón ¿es varC >0? Era falsa, pero
independientemente se ha ejecutado las sentencias que había dentro.
Como hemos visto anteriormente en los programas muchas veces declaramos variables
sólo para unas acciones, un contador para un bucle, o una función. El ámbito de las variables,
también llamado scope pueden ser de dos formas.
Global: Serán válidas desde cualquier parte del código, para ello sólo tenemos que de-
finirlas fuera de las funciones, y éstas se podrán usar desde cualquier sitio.
function muestraNombre(){
alert(nombre);
function muestraNombre(){
alert(nombre);
}
322
muestraNombre();
alert(nombre);
function muestraNombre(){
alert(nombre);
muestraNombre();
alert(nombre);
En este caso, la variable nombre está siendo visible y accesible desde dentro de la fun-
ción, aunque no hayamos declarado, como fuera de la misma.
Un ejemplo más para poner de manifiesto las variables globales y locales, usando los dos
ámbitos sería el siguiente:
M3. JQUERY
function muestraNombre(){
alert(nombre);
alert(nombre);
muestraNombre();
alert(nombre);
Mi nombre es Antonio
Aunque se defina una variable local con el mismo nombre, siempre prevalecerá la varia- 323
ble local a la global, por lo que debes tener cuidado ya que puedes tener un resultado totalmen-
te diferente, sólo por haber puesto var delante de la variable nombre dentro la función (error
común).
function muestraNombre(){
alert(nombre);
alert(nombre);
muestraNombre();
alert(nombre);
Mi nombre es Antonio
Aula Mentor
Mi nombre es Antonio
3.8. Arrays.
Los array son listas donde vamos almacenar elementos, por ejemplo, los nombres de los
alumnos de una clase, numerándolos desde el índice 0, pero ¡ojo!, no empiezan en el 1, sino el
0. Si queremos un arrays con 5 elementos, tendríamos que el primer elemento sería el 0 y último
en el 4:
0 Luis
1 María
2 Francisco
3 Emilio
4 Antonio
Para definir nuestro array/lista en JavaScript tendríamos que usar la siguiente sintaxis:
alert(miLista[3]);
3.9. Objetos.
[Objeto = Prototípo]{
[ Propiedad = Variable ]
M3. JQUERY
[ Método = Funcion ]
// Codigo
};
/* Codigo*/
this.nombre = nombre;
this.apellidos = apellidos;
this.edad = edad;
this.colorOjos = colorOjos;
Ya hemos creado un modelo para nuestra aplicación web que va a ser Persona, la cual va
a tener un nombre, apellidos y edad concreta, se podrían añadir todas las propiedades que qui-
sieramos. Si nos fijamos hemos usado this.propiedad, con ésto nos estamos refiriendo a este
elemento en concreto. Ahora para poder crearnos objetos de ese tipo, podemos usar la palabra
reservada new y el objeto que vamos a crear:
Y ya podemos hacer con la nueva Persona Antonio lo que quisieramos, mostrar mensaje,
calcular otros datos o por ejemplo mostrarlo por pantalla, para ello, nos creamos un párrafo con
un id llamada "textoSalida" y le agregamos los datos hemos creado:
Aula Mentor
document.getElementById("textoSalida").innerHTML =
"<br>Nombre : "+Antonio.nombre +
"<br>Edad : "+Antonio.edad +
Otro punto importante de usar objetos es que pueden contener cualquier tipo de valor:
un número, una cadena, un array, una función o incluso otro objeto. Podemos crear por tanto
en la definción del objeto todo lo que necesitemos para en un futuro poder usarlo, por ejemplo
vamos agregarle un método a nuestro objeto Persona donde nos devuelva el nombre completo,
el nombre más los apellidos:
this.nombre = nombre;
326
this.apellidos = apellidos;
this.edad = edad;
this.colorOjos = colorOjos;
function nombreCompletoPersona(){
this.nombreCompleto = nombreCompletoPersona();
document.getElementById("textoSalida").innerHTML =
"<br>Nombre : "+Antonio.nombre +
M3. JQUERY
"<br>Edad : "+Antonio.edad +
Antonio.nombreCompletoPersona();
Nos dará un error el script entero y si accedemos en modo depurador del navegador F12,
dentro de la pestaña Consola, tendremos el siguiente error:
327
Uncaught TypeError: undefined is not a function
Otra forma que también permite sería usar dentro del objeto la siguiente definición:
this.nombreCompleto2 = function () {
};
Y para acceder debemos usar corchetes en este caso, porque estaríamos accediendo a la
función y no a la propiedad:
Antonio.nombreCompleto2();
Este error es difícil de detectar y aunque a veces el navegador en modo depurador nos
da información si pulsamos en la pestaña consola, otras veces hay que revisar y ser muy metó-
dico en la programación, sino en grandes proyectos será muy difícil detectar donde se ha pro-
ducido el error.
Persona.prototype.nombreCompleto3 = function () {
};
Y para acceder a ella, podemos hacerlo como en el caso anterior con el doble corchete
después del nombre asignado ().
Antonio.nombreCompleto3();
Pero no sólo podemos agregar métodos a nuestros objetos creados, podemos hacerlo
también a funciones propias de JavaScript, como por ejemplo:
Array.prototype.contarRepetidos = function(palabraBuscada){
var contador = 0;
if(this[i] == palabraBuscada)
328 contador++;
};
return contador;
document.getElementById("textoSalida2").innerHTML+= miLista[i];
document.getElementById("textoSalida2").innerHT-
ML+=" , ";
};
M3. JQUERY
document.getElementById("textoSalida2").innerHTML+=
http://www.netmarketshare.com/browser-market-share.aspx?qprid=2&qpcustomd=0
En el gráfico se muestra que a día de hoy, sigue siendo el navegador más usado y no hay
ningún navegador que supere la cuota de éste y más de un 20% sobre el mercado creo que es
importante como para tenerlo en cuenta, y lo que es peor, un navegador tan antiguo como es
Internet Explorer 6.0 tiene una cuota del 4.08% que es muy superior a otros navegadores más
actuales como es FireFox.
Se ha decidido por tanto basarnos todo el curso en la última versión que soporta a esos
navegadores lo máximo posible la 1.11.1, pero ¡ojo! lo máximo posible, puede ser que haya ca-
sos excepcionales que tengamos problemas.
De todas formas, a lo largo del curso iremos haciendo pruebas con la última versión
y veremos los resultados obtenidos. Y si han sacado alguna versión posterior a la 1.11.1 en la
sección de recursos del curso tendrás la misma versión para que no tengas problemas.
Esta versión está pensada para programadores, y por eso está uncompressed, ya que esta
versión viene con documentación, comentarios de código, y está tabulada para su fácil lectura. Si
elegimos la versión compressed estaría sin ningún comentario, ni tabulada y ocuparía lo mínimo
posible para agilizar nuestro navegador, esta versión es la que debemos descargar cuando vaya-
mos a poner online nuestra web, y mientras trabajamos, por si tenemos alguna duda, usamos la
versión de desarrollador o descomprimida.
331
Versión tabulada y comentada. Etc. Tamaño 277KB
Para poder usar este archivo jQuery sólo tenemos que añadirlo a nuestro archivo HTML
en el <head></head> pero para enlazarlo usaremos la siguiente sentencia, si el archivo que nos
hemos bajado se llama jquery-1.11.1.js:
Pensamos que queremos hacer una aplicación donde vamos a tener tres botones y que
dependiendo de donde haga click el usuario nos muestre un texto u otro.
Aula Mentor
¿Cómo harías esto con HTML5 y CSS3? Este es un ejemplo muy sencillo y aunque haya-
mos usado funciones de JavaScript, realmente por si solo, no podríamos hacer ésto. Tienes la
solución en el siguiente link:
<!DOCTYPE html>
<html lang="es">
<head>
</head>
<body>
<header>
</header>
<nav>
</nav>
<section>
<article>
</article>
<article>
<form>
</form>
<article>
</section>
<footer>
</footer>
</body>
333
</html>
¿Qué hay de nuevo en este código? Bueno, asignar un id a un párrafo, lo hemos reali-
zado muchas veces, le hemos asignado al párrafo un texto cualquiera para mostrar que se está
iniciando:
Y posteriormente lo que vamos hacer es que cuando el usuario haga onclick sobre el
botón, voy a usar la función html() y le voy a pasar un texto, en concreto con la opción que ha
elegido.
334
Volviendo al código del ejercicio, analicemos un poco más la sentencia que hemos usa-
do:
$('#mensaje')
Posteriormente vamos a usar una función que puede agregar texto HTML en donde esté
la etiqueta, por ejemplo si usamos .html(textoHtml), añadiremos al párrafo en este caso, el
texto que hemos seleccionado, html('Ha elegido la opción …') por eso, sustituye el texto que
había antes en la etiqueta y nos muestra el que hemos seleccionado con la función.
M3. JQUERY
Si no has entendido muy bien este último párrafo no te preocupes, se ha usado para que
podamos probar nuestro primer ejercicio de jQuery, y corresponde algunas funciones a leccio-
nes futuras, se ha usado para poder ver cómo interactuamos con el documento. Ahora lo que
importa es que sepas cómo debes llamar a tu fichero jquery desde tu fichero HTML y más ade-
lante iremos viendo más ejercicios y volveremos a retomar la edición del texto dinámicamente
entre otras muchas cosas más.
Si recuerdas en JavaScript vimos unos métodos para acceder a los elementos del docu-
mento (DOM), getElementById Y getElementByTagName, etc. Con jQuery se han transformado
para poder acceder a los mismos elementos pero de una forma más sencilla, por tanto tendría-
mos los siguientes selectores:
Al igual que en CSS3 cuando queremos acceder al identificador podemos hacerlo lla-
mándo directamente sobre las etiquetas que queremos actuar:
335
$("etiqueta")
Por ejemplo si queremos acceder a la etiqueta lista, seleccionando todas las etiquetas del
documento que sean listas no ordenadas, podíamos usar la siguiente sintaxis:
$("ul")
Para seleccionar los identificadores de nuestra web, podemos usar el caracter #, y al igual
que pasaba en CSS3 debes recordar que debe existir sólo una definición del identificador, en
caso que existan más, no se aplicarán a todas, sino como vimos en CSS3 a la primera etiqueta
que encuentre al leer el documento.
$("#identificador")
Imagina que has creado un identificador llamado miboton, tendremos que usar la si-
guiente sintaxis para seleccionarlo:
$("#miboton")
Para seleccionar nuestra clases definidas en nuestro documento podemos usar el selector
de clase de jQuery, y éste si puede estar definido en varios sitios del documento:
Aula Mentor
$(".clase")
Si tenemos una clase que se llama ocultarme y queremos seleccionar todos los elemen-
tos que tengan esa clase, podremos usar:
$(".ocultarme")
<p>Dependiendo de que botón eligas, se ocultarán varios o todos los elementos de la lista </p>
<ul>
<li>Elemento 2</li>
</ul>
Clase: ocultame
Veamos un ejemplo completo y sólo adelantaremos una propiedad que podemos usar
sobre las etiquetas HTML que es para ocultar una etiqueta seleccion.hide() o para mostrar selec-
cion.show(). Más adelante veremos muchos más métodos y eventos; ahora centrémonos en la
selección de elementos.
1. <script type="text/javascript">
2. $(document).ready(function(){
3.
4. $("#muestraLista").click(function(){
M3. JQUERY
5. $("ul").show();
6. $(".ocultame").show();
7. });
8. $("#ocultaLista").click(function(){
9. $("ul").hide();
10. });
11. $("#ocultaItems").click(function(){
12. $("ul").show();
13. $(".ocultame").hide();
14. });
15.
16. });
Las líneas 1 y 17 es la forma de decir al navegador que vamos a insertar texto de tipo
javascript o jQuery, aunque se puede omitir y dejar exclusivamente con <script></script>.
La línea dos es una de las principales y más importantes de jQuery, ya que en ella, esta-
mos diciendo que hasta que no se lea el documento no esté accesible el script, ésto es porque si
una página no ha terminado de cargar los elementos y nosotros en nuestro script, seleccionamos
una etiqueta que no está, y a lo mejor toda nuestra aplicación o parte depende de ese elemento
o etiqueta, fallará y el usuario no comprenderá que ha pasado.
Esta forma de llamar al documento, se puede decir de varias formas, por si en algún ma-
nual o documentación lo encuentras definido de otra forma, ten presente que son otras formas
de decir lo mismo:
$(function(){
});
Pruébalo y ya verás como cuando termine de cargar el documento aparece una ventana
emergente indicándote el mensaje. De todas formas, aún existiendo esta función abreviada, te
recomiendo que al inicio uses la otra denominación.
Aula Mentor
En las líneas 4, 8 y 11 estamos usando el selector de identificador (ID) que hemos asig-
nado a cada botón, y una vez que lo hemos seleccionado podemos interactuar con él, en este
caso, hemos aplicado el evento .click y creamos una función para ocultar o mostrar el elemento
según me interese.
En las líneas 5,9 y 12 estamos usando un selector de etiqueta, en este caso el de la lista
<ul> y dependiendo de nuestro programa, mostramos o ocultamos el contenido.
En las líneas 6 y 13 estamos usando un selector de clase, llamando a todos los elementos
que tiene esa clase asignada, como son los ítems 1 y 3 de la lista definida en el HTML.
Bien, ahora es cuando tenemos que hacer nuestro algoritmo para interactuar con los
elementos web según queramos. ¿Qué queremos hacer? ¿Cómo nos planteamos el ejercicio?. El
80% de todo el trabajo en los algoritmos es el análisis del programa, los parámetros de entrada
que vamos a tener y cuál es la mejor forma de procesar los datos y hacer sobre todo lo que
tengamos planeado. El resto, es como se suele decir en el argot "teclear código".
Una vez entendido la idea de que son los selectores, y habíendonos parado en los más
comunes, entendiendo que es una forma de filtrar, seleccionar las etiquetas y elementos de un
documento html, vamos a exponer los selectores más comunes en jQuery y aunque se repiten
las tres iniciales, los adjuntos todos en una tabla y seguidos para que los tengas todos centrados
y te sea fácil buscar el selector o filtro que necesites en cada situación:
338
Selector Ejemplo Conjunto de elementos o
acción
* $("*") Todos los elementos
#id $("#identificador") El elemento con identificador
id="identificador"
.class $(".miclase") Todos los elementos con
que pertenezcan a la clase
class="miclase"
.class,.class $(".miclase1,.miclase2") Todos los elementos con la
clase "miclase1" o "miclase2"
element $("p") Todas los elementos de la eti-
queta HTML <p>
el1,el2,el3 $("h1,div,p") Todos los elementos que ten-
gan las siguiente etiquetas
<h1>, <div> y <p>
parent > child $("div > p") Todos los elementos <p> que
son un hijo directo de un ele-
mento <div>
parent descendant $("div p") Todos los elementos <p> que
son descendientes de un ele-
mento <div>
element + next $("div + p") El elemento <p> que están al
lado de cada uno de los ele-
mentos <div>
Aula Mentor
$(":root").css("background-
color","blue");
:lang(language) $("p:lang(es)") Todos los elementos <p> con
un valor de atributo lang co-
menzando con "es"
342 Como puedes ver, hay muchas formas de seleccionar y cambiar los elementos de forma
masiva, selectiva o jerárquica. Como ya hemos visto en CSS3 una vez que tenemos el elemento
correcto aplicamos las propiedades que queremos a ese elemento, aquí podemos hacer exac-
tamente lo mismo e incluso como veremos en apartados posteriores aplicar estilos CSS desde
jQuery. Eso no quiere decir que lo sustituye, en absoluto, lo complementa, al poder modificar
las propiedades dinámicamente, podrías por ejemplo cambiar de fondo o de color de letra cada
segundo, ocultar elementos o mostrar elemento como en el ejemplo 4 de la lista.
Existen muchos selectores que están indicados, o mejor dicho, se suelen usar para deter-
minados componentes de la web, uno muy útil es el de los formularios, donde tenemos acceso
a <input type="text"… type="button"…etc, con él podemos seleccionar todos los elementos y
tratar dinámicamente el texto que está introducciendo. Otros elementos están muy indicados
para las tablas, :first, :last, :even, :odd, que podríamos decir: la primer fila de la tabla (cabecera),
la última (resumen de tabla), las filas pares de un color y las filas impares de otro.
Hay un punto muy importante que poco a poco debes de ir comprendiendo, para sa-
carle realmente el partido a HTML5, CSS3 y jQuery; has de hacer un estudio y diseño previo
concienzudo, es más, incluso no debemos dejar de lado usar eficazme los nombres, y me refiero
a nombres lógicos que en un futuro me pueden ayudar, por ejemplo:
Tenemos un menu horizontal, un menu lateral y un menu inferior, si usamos los nombres
de clase o identificador, por ejemplo, en vez de usar:
<div id="horizontal">…</div>
Y si estamos usando un tipo de letra concreto para los menús, o un estilo concreto, po-
dríamos hacer uso del selector $("[div|='menu']") y podemos acceder de golpe a los elementos
anteriores y una vez seleccionados aplicar las propiedades o acciones que tengamos pensadas.
Si el nombre no hubiera sido precedido por la palabra menu, se podría hacer, pero tendríamos
que ir uno por uno, que al final es más líneas de código, más complejo, más posibilidad de error
y peor para futuros cambios.
6. Eventos.
El usuario tiene varias formas de interactuar con las aplicaciones web, y jQuery tiene
muchos mecanismos para facilitar que sean dinámicas y respondan a cierto eventos. También se
podría usar JavaScript, como hemos dicho anteriormente, jQuery es un motor que usa en defini-
tiva JavaScript sólo que remodelado para facilitar el trabajo al desarrollador. Veamos los eventos
que disponemos en jQuery, para ello vamos a ver eventos referidos a varios actores respecto a
nuestro documento:
343
Evento .click()
Descripción Enlaza un controlador de eventos para el
evento "click" con JavaScript o desencadena
ese evento en un elemento.
Ejemplo $("miseleccion").click(function(){
//Mis acciones
});
Evento .dblclick()
Descripción Enlaza un controlador de eventos para el
evento "dobleclick" con JavaScript o desenca-
dena ese evento en un elemento.
Ejemplo $("miseleccion").dblclick(function(){
//Mis acciones
});
Aula Mentor
Evento .focusout()
Descripción Enlaza un controlador de eventos al evento
"focusOut" de JavaScript. Este evento se dis-
para cuando el elemento pierde el foco, por
ejemplo en un formulario cuando estamos en
un campo y le damos al tabulador para pasar
al siguiente campo, este llamaría al evento .fo-
cusout.
Ejemplo $("miseleccion").focusout(function() {
//Mis acciones
})
Evento .hover()
Descripción Enlaza uno o dos controladores a los elemen-
tos coincidentes, y se ejecutará cuando el pun-
tero del ratón entra y sale de los elementos.
Ejemplo $("miseleccion").hover(function() {
//Mis acciones
344
})
Evento .mouseup()
Descripción Enlaza un controlador de eventos al even-
to "mouseup" de JavaScript. Este se activará
cuando se ha presionado el ratón al soltar la
presión sobre el ratón.
Ejemplo Bind an event handler to the "mouseup" JavaS-
cript event, or trigger that event on an element.
Evento .mousedown()
Descripción Enlaza un controlador de eventos al evento
"mousedown" de JavaScript. Este se activará
cuando se ha presionado el ratón hasta llegar
a activar el click del ratón, (sin tener que soltar
la presión sobre el ratón este se activará).
M3. JQUERY
Ejemplo $("miseleccion").mousedown(function() {
//Mis acciones
})
Evento .mouseenter()
Descripción Enlazar un controlador de eventos para ser
disparado cuando el ratón entra en un ele-
mento, es muy similar al evento .hover, pero
no son iguales.
Ejemplo $("miseleccion"). mouseenter(function() {
//Mis acciones
})
Evento .mouseleave()
Descripción Enlaza un controlador de eventos para ser dis-
parado cuando el ratón sale de un elemento.
Ejemplo $("miseleccion"). mouseleave(function() {
})
Evento .mouseout()
Descripción Enlaza un controlador de eventos al evento
"mouseout" de JavaScript. Se activa cuando el
ratón sale fuera del elemento.
Ejemplo $("miseleccion"). mouseout(function() {
//Mis acciones
})
Evento .mouseover()
Descripción Enlaza un controlador de eventos para el
evento "mouseover" de JavaScript. Se activa
cuando el ratón pasa por encima del elemento
Ejemplo $("miseleccion"). mouseover (function() {
//Mis acciones
})
Aula Mentor
Evento .mousemove()
Descripción Enlaza un controlador de eventos al evento
"mousemove" de JavaScript. Se activa cuando
el ratón se mueve, además podemos sacar las
coordenadas del mismo.
})
Este evento asocia una función al evento "click" del ratón sobre los elementos de la selec-
ción. Normalmente esta asociado a botones, pero pueden ser otros elementos ya que en nuestra
web muchas veces no todo es lo que parece y lo que parece que sea un botón, puede ser una
lista con unas propiedades determinadas, como vimos en los ejemplos de los menús.
Una forma para depurar errores, ya que suele ser muy común escribir el nombre equi-
vocado o no aplicarle el evento correcto es utilizar el modo depurador del navegador F12, pero
esta vez, si usamos Google Chrome, en la pestaña Elements, en el apartado de la derecha pin-
chamos en EventListener (Escuchadores de eventos) podremos comprobar que tenemos activo
M3. JQUERY
...
<article>
<ul>
<li>Elemento 1</li>
347
<li>Elemento 2</li>
<li>Elemento 3</li>
</ul>
</article>
...
Parte de jQuery
<script type="text/javascript">
$(document).ready(function(){
$("#muestraLista").click(function(){
$("ul").show();
Aula Mentor
});
$("#ocultaLista").click(function(){
$("ul").hide();
});
$(".cambiacolor").click(function(){
$(".cambiacolor").css("color","blue");
else
348 $(".cambiacolor").css("color","red");
});
</script>
<style type="text/css">
.cambiacolor{
color: red;
</style>
Conforme vayamos haciendo click en el párrafo, obtendremos un color, rojo o azul, se-
gún el color actual del texto.
M3. JQUERY
Podemos capturar el evento "doble click" sobre algún elemento HTML, similar a click,
pero esta vez tendremos que usar dos click seguidos, siguiendo con el ejemplo anterior podría-
mos tener:
<hr>
<p class="cambiacolor2">Soy un párrafo y si haces dos clicks sobre mí cambio de color </p>
Código jQuery
$(document).ready(function(){
$(".cambiacolor2").dblclick(function(){
(".cambiacolor2").css("color","blue");
else
$(".cambiacolor2").css("color","red");
});
});
Puede resultar un poco confusa las definiciones sobre los eventos del ratón que hemos
comentado anteriormente. Para aclarar ésto, puedes usar el siguiente ejemplo para entender
cómo se comporta nuestra aplicación con los eventos del ratón, aunque agregaré el código, te
recomiendo que empieces por ejecutar el archivo en tu ordenador y posteriormente leer el có-
digo.
En el html tendríamos:
….
350
<article>
<br><hr><br>
<br><hr><br>
<p>Mueve tu ratón</p>
<p>0</p>
</div>
<p>Mueve tu ratón</p>
M3. JQUERY
<p>0</p>
</div>
</article>
….
Y en el jQuery:
var i = 0;
$("div.overout")
.mouseover(function() {
})
351
.mouseout(function() {
});
var n = 0;
$( "div.enterleave" )
.mouseenter(function() {
})
.mouseleave(function() {
});
Aula Mentor
Con este evento capturamos la posición exacta del usuario de nuestro ratón y podemos
obtener los valores numéricos respecto al documento y la ventana del cliente. Supongamos que
tenemos una caja donde vamos a detectar la posición exacta del ratón:
<p>EVENTO: mousemove, fíjate que los valores even.page y even.client no coincide, reduce el tamaño de
la ventana y comprueba como afectan los valores</p>
<br><hr><br>
<p>
<span> </span>
</p>
<div id="detectaRaton"></div>
...
En el fichero CSS:
#detectaRaton {
width: 400px;
M3. JQUERY
height: 400px;
background: blue;
En el jQuery tendríamos:
...
$("#detectaRaton").mousemove(function( event ) {
var pageCoords = "( " + event.pageX + ", " + event.pageY + " )";
var clientCoords = "( " + event.clientX + ", " + event.clientY + " )";
});
...
Otro evento que podemos capturar del usuario de nuestra web es cuando en un click ha
pulsado y soltado la tecla. Debemos pensar que cuando hacemos click en cualquier link real-
mente ocurren dos eventos:
...
<br><hr><br>
<br><hr><br>
<p class="textoMouseUpDown">Haz click sobre este cuadrado y comprueba en qué momento esta el "click"
del ratón</p>
<div id="controlClick"></div>
...
#controlClick{
width: 200px;
height: 200px;
354
background-color: blue;
...
});
});
...
M3. JQUERY
Evento .focusout()
Descripción Enlaza un controlador de eventos al evento
"focusOut" de JavaScript. Este evento se dis-
para cuando el elemento pierde el foco, por
ejemplo en un formulario cuando estamos en
un campo y le damos al tabulador para pasar
al siguiente campo, éste llamaría al evento .fo-
cusout.
Ejemplo $("miseleccion"). focusout(function() {
//Mis acciones
})
Evento .keydown()
Descripción Enlaza un controlador de eventos al evento
"keydown" de JavaScript, parecido al evento
.mousedown pero esta vez en el teclado.
Ejemplo $("miseleccion"). keydown(function() {
//Mis acciones
355
})
Evento . keyup()
Descripción Enlaza un controlador de eventos al even-
to "keyup" de JavaScript, parecido al evento
.mouseup pero esta vez en el teclado.
Ejemplo $("miseleccion"). keyup(function() {
//Mis acciones
})
Evento . keypress()
Descripción Enlaza un controlador de eventos al evento
"keypress" de JavaScript. Este evento se acti-
vará cuando ocurra el keyup y keydown en el
mismo evento, por ejemplo, si pulsamos una
tecla en un campo de un formulario y nos va-
mos a otro campo con el ratón (sin soltar la
tecla y si no repite la tecla en tiempo) no se
llamará a este evento.
Aula Mentor
//Mis acciones
})
Ejemplo .focusout()
356
Tendríamos en el html:
...
<div class="unaCaja">
<h3>.focusout()</h3>
<h5>Ve pasando de un a otro campo ya sea con el TAB o con el ratón y captura el evento
.focusout()</h5>
<label>Nombre</label>
<label>Apellidos</label>
<label>Teléfono</label>
</div>
...
En el CSS:
.unaCaja{
width: 250px;
height: 250px;
border-width: 1px;
border-style: solid;
text-align: right;
h3, h5{
text-align: center;
$(document).ready(function(){
var focus = 0;
$( ".misInput" )
.focusout(function() {
focus++;
});
<div class="unaCaja">
<h3>.keypress(),.keyup(),.keydown()</h3>
<h5>Escribe una letra o varias, pero observa el Orden y el número de veces que se
activa.</h5>
<label>Nombre</label>
<label>Apellidos</label>
<label>Teléfono</label>
</div>
...
$(document).ready(function(){
var keypress = 0;
var keydown = 0;
var keyup = 0;
var posicion = 0;
$( ".misInput" )
.keydown(function() {
posicion++;
keydown++;
359
})
.keypress(function() {
posicion++;
keypress++;
})
.keyup(function() {
posicion++;
keyup++;
Debes fijarte que podemos "escuchar" diferentes eventos sobre el mismo selector, en este
caso, para ahorrar código se puede usar seguidos uno detrás del otro, y finalizaremos cuando
pongamos el punto y coma. Es un fallo típico poner el ";" antes y no se ejecutarán las capturas de
eventos que hayamos declarado a continuación, deberemos declarar nuevamente el selector $(
"seleccion" ).evento en el mejor de los casos, pero lo normal es que nos dé un error de Script
y no funcionará nada de ese bloque.
Te aconsejo que hagas la siguiente prueba, cambia el ";" que hay al final del evento .ke-
yup e insertalo en el evento anterior key.
.keypress(function() {
posicion++;
keypress++;
360 .keyup(function() {
posicion++;
keyup++;
Incluso nos dice más, a la derecha nos dirá el nombre del archivo y la línea donde ha co-
menzado a tener el error o ha detectado un error de patrón, en este caso, ha detectado el token
. que para el navegador es que ha terminado de leer los eventos y no entiende a qué elemento
le estamos escuchando el evento, ya que no corresponde con la sintaxis correcta $( "seleccion"
).evento.
Podemos saber cuándo ha pulsado o escrito un carácter el usuario, y también podemos saber el
número de caracteres que tiene un campo, podremos pasar al siguiente campo cuando se haya
rellenado, por ejemplo el dni o número de teléfono tiene un número fijo de caracteres, cuando
M3. JQUERY
lleguemos a su tope, podemos pasar al siguiente campo, ahorrando al usuario incluso que tenga
que pulsar el tabulador TAB.
Otro de los eventos que nos son muy útiles en nuestras páginas web es el control sobre
los formularios, es decir, escuchar y detectar los estados diferentes del formulario y poder inte-
ractuar con ellos una vez que el usuario los ha lanzado.
Evento .blur()
Descripción Enlaza un controlador de eventos al evento
"blur" de JavaScript, El evento blur se dispa-
ra cuando pierde el foco de control. Indica-
do para los formularios: text, textarea, button,
checkbox, fileupload, password, radio, reset y
submit.
Ejemplo $("miseleccion"). blur(function() {
//Mis acciones
})
361
Evento .change()
Descripción Enlaza un controlador de eventos al evento
"change" de JavaScript, Con este envento po-
dremos detectar entre otras cosas cuando el
usario ha cambiado el estado de alguna selec-
ción multiple.
Ejemplo $("miseleccion"). change(function() {
//Mis acciones
})
Evento .focus()
Descripción Enlaza un controlador de eventos al evento
"focus" de JavaScript, detectando cuándo el
elemento en cuestión tiene el foco del nave-
gador.
Ejemplo $("miseleccion"). focus(function() {
//Mis acciones
})
Aula Mentor
Evento .focusin()
Descripción Detectaría cuándo el elemento ha cogido el
foco del navegador.
Ejemplo $("miseleccion"). focusin(function() {
//Mis acciones
})
Evento .select()
Descripción Enlaza un controlador de eventos al evento
"select" de JavaScript, detectando si el usuario
ha realizado alguna selección en el formulario
Ejemplo $("miseleccion"). select(function() {
//Mis acciones
})
Evento .submit()
Descripción Enlaza un controlador de eventos al evento
"submit" de JavaScript, detectando cuándo el
362 usuario ha realizado submit en un formulario.
Este evento es muy utilizado para confirmar
y detectar si el usuario ha rellenado correcta-
mente los datos de un formulario, por ejemplo,
no lo dejaremos pasar hasta que haya escrito
el texto, Entiendo y acepto las condiciones.
Ejemplo $("miseleccion"). submit(function() {
//Mis acciones
})
Debido a las similitudes de algunos métodos, vamos a realizar un ejemplo, donde los
vamos a enfrentar y ver, qué elemento se coge antes y en qué momento correcto se activaría.
FocusIn se activa justo al inicio de coger el foco del elemento cuando estamos en un
campo de texto, pero si se trata de un elemento dentro de otro, el elemento padre, tomará el
focusIn, pero nunca cogerá el focus, lo hará el elemento hijo. Para ello, fíjate en el ejemplo
que hay dos partes, una donde se muestra los eventos que hay cuando nos movemos dentro
de nuestro formulario, y otra donde mostramos los valores respecto del div. Es muy importante
tener claro ésto porque podemos detectar que dependiendo del caso, nunca se llega a ejecutar
el evento que deseamos sobre el elemento.
M3. JQUERY
...
<div class="unaCaja">
<h3>.focusout() vs .blur</h3>
<h5>Ve pasando de un a otro campo ya sea con el TAB o con el ratón y capta el evento
.focusout()</h5>
<label>Nombre</label>
<label>Apellidos</label>
<label>Teléfono</label>
</div>
...
Respecto al jQuery
$(document).ready(function(){
var focusout = 0;
var focusin = 0;
var blur = 0;
var midivfocus = 0;
var midivfocusout = 0;
var midivfocusin = 0;
var midivblur = 0;
M3. JQUERY
var midivposicion = 0;
var posicion = 0;
$( ".misInput" )
.focus(function(){
$(this).css("background-color","lime");
posicion++;
focus++;
})
.focusout(function(){
$(this).css("background-color","#ffffff");
posicion++; 365
focusout++;
})
.focusin(function(){
posicion++;
focusin++;
})
Aula Mentor
midivfocusout++;
})
.focusin(function(){
$(this).css("background-color","#FFFFCC");
midivposicion++;
midivfocusin++;
})
.blur(function(){
$(this).css("background-color","blue");
366 midivposicion++;
midivblur++;
$( "#textoSalida8" ).text( "(ORDEN: "+posicion+")Blur activado: " + midivblur + " veces. Color ->
Azul" );
});
Y como CSS:
M3. JQUERY
.unaCaja{
width: 270px;
height: 360px;
border-width: 1px;
border-style: solid;
border-color: blue;
text-align: right;
margin-top: 30px;
h3, h5{
text-align: center;
Vamos a ver un ejemplo usando los tres eventos, change, submit y select, ambos muy
usuales en los formularios, como son un select con varias opciones, donde mostraremos si ha
existido algún cambio de la selección original, además tendremos un textarea donde obligare-
mos al usuario a que escriba un texto concreto "He leido y acepto las condiciones" muy útil para
los formularios que requieran confirmar que el usuario ha leído y acepta las condiciones. Por
último comprobaremos que todo está correcto y si es así, enviaremos el formulario, en nuestro
caso, mostraremos un alert indicando al usuario que se va a enviar el formulario.
<div class="unaCaja">
<label>Nombre</label>
<br>
<br>
<option>HMLT5</option>
<option selected="selected">CSS3</option>
<option>JQUERY</option>
368 </select>
<p id="textoSalida1"></p>
<br>
</form>
<p id="textoSalida2">Debes escribir que aceptas las condiciones para continuar y escribir tu
nombre</p>
</div>
En el CSS tendríamos:
M3. JQUERY
.unaCaja{
width: 270px;
height: 400px;
border-width: 1px;
border-style: solid;
border-color: blue;
text-align: right;
margin-top: 30px;
select{
width: 250px;
369
h3, h5{
text-align: center;
Y en el jQuery:
$(document).ready(function(){
//----------------------------------------------------------------------
$("div")
.focusout(function(){
$(this).css("background-color","white");
})
Aula Mentor
.focusin(function(){
$(this).css("background-color","#FFFFCC");
});
//----------------------------------------------------------------------
$( "select" )
.change(function () {
});
});
//----------------------------------------------------------------------
if ( $( "#condiciones" ).val() === "He leido y acepto las condiciones" && ($( "#txtNombre" ).val().
length > 0)) {
return;
}
M3. JQUERY
$( "#textoSalida2" ).text( "Repito: Debes escribir 'He leído y acepto las condiciones' para continuar
y escribir tu nombre" );
event.preventDefault();
});
En este caso hemos usado varias cosas nuevas, una muy importante y que se va a usar
mucho cuando tengamos varias opciones, o mejor dicho un conjunto de datos devuelto, como
es el caso de la selección múltiple es la función .each, donde iterará con cada uno de los ele-
mentos devueltos. Ésto se suele usar mucho para iterar cuando se realiza una selección amplia
de elementos en jQuery y queremos iterar por ellos.
Otro elemento nuevo usado es event.preventDefault() que veremos más adelante pero
adelantamos que lo podemos usar cuando deseamos cancelar o evitar el comportamiento por
defecto del navegador frente a un determinado evento, como en este caso para el formulario.
También tenemos un evento que nos informa que se ha leído correctamente el docu-
mento y a partir de ese momento podremos hacer nuestros acciones con jQuery. Realmente ya 371
lo hemos usado anteriormente, sería el evento:
.ready()
Mostrábamos una alerta indicando al usuario que ya se había leído el documento y po-
díamos trabajar con él, en esta ocasión vamos a mostrar un texto para ser menos intrusivos y
hacer una navegación más fluida. Sólo tendremos que hacer lo siguiente:
$( document ).ready(function() {
$( "p" ).text( "El DOM ha sido cargado y ahora podemos trabajar con él." );
});
..
<body>
</body>
..
Es posible que veas por internet otros métodos asociados al documento .load y .unload, estos
métodos han sido decrapted a partir de las versión 1.8, por lo que no debes usarlo y aún menos
si usas la versión 2.x.
Evento .resize()
Descripción Enlaza un controlador de eventos al evento
"resize" de JavaScript, detectando cuando el
usuario ha realizado un cambio de tamaño de
la ventana del navegador
Ejemplo $("miseleccion"). resize(function() {
372
//Mis acciones
})
Evento .scroll()
Descripción Enlaza un controlador de eventos al evento
"scroll" de JavaScript, detectando cuando el
usuario ha interactuado con el scroll
Ejemplo $("miseleccion"). scroll(function() {
//Mis acciones
})
Ejemplo .resize()
Supongamos que necesitamos saber el tamaño actual que tiene el navegador del usuario
o si ha redimensionado el tamaño del mismo, podríamos usar el evento .resize() para tal acción:
M3. JQUERY
<p id="tam"><p>
373
Y en el archivo jQuery:
$( window ).resize(function() {
});
Ejemplo .scroll()
Vamos hacer un pequeño script para detectar cuando el usuario ha usado el scroll, para
ello vamos a escribir varios párrafos y vamos a cambiar el tamaño de la ventana, para forzar que
aparezca el scroll por la cantidad. Una vez que se active, cuando movamos éste, pondremos un
detector.
...
<div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
...
En el CSS:
374 span {
color: red;
display: none;
font-size: 18px;
$( window ).scroll(function() {
});
El objeto Event es pasado a todos los eventos que se lanzan, y como era de esperar, al
igual que en los otros eventos podemos usar algunos atributos que nos van a venir muy bien
para nuestras aplicaciones web.
M3. JQUERY
Atributo .event.currentTarget
Descripción Devuelve el elemento actual sobre el que se
ha lanzado el evento. Muy parecido al this en
la Programación Orientada a Objetos.
Ejemplo $( "p" ).click(function( event ) {
});
Ejemplo10-event/index.html#event.cu-
rrentTarget
Resumen En este ejemplo, seleccionaríamos el párrafo y
cuando hagan click sobre el, comprobamos si
el atributo event.currentTarget es igual al ob-
jeto this, el cual nos da true, por lo que pode-
mos referirnos a él de ambas formas.
375
Atributo .event.data
Descripción Devuelve los datos que hayamos podido pasar
al evento cuando se asocia con .bind. (En el
siguiente apartado vemos el evento .bind)
Aula Mentor
Ejemplo …..
…..
$(".misParrafos").each(function(i){
$(this).on("click",{x:i},function(event){
});
});
…..
…..
Ejemplo10-event/index.html#event.data
M3. JQUERY
<ul>
<li>Elemento 2</li>
<li>Elemento 3</li>
<li>Elemento 4</li>
</ul>
$(document).ready(function() {
$('ul li').click(function() {
var i = $(this).index();
Aula Mentor
});
});
Atributo .event.preventDefault()
Descripción Como hemos usado en varias situaciones (for-
mularios, ondragover…) si llamamos a este
método dentro de un evento, la acción pre-
determinada que se ejecutaría será cancelada.
Ejemplo ….
….
event.preventDefault();
378
$( "<div>" )
.appendTo( "#log" );
});
….
….
<div id="log"></div>
….
….
Ejemplo10-event/index.html#event.preven-
tDefault
M3. JQUERY
Atributo .event.isDefaultPrevented()
Descripción Devuelve true o false si ha sido lanzado el
método preventDefault() o no.
Ejemplo ….
….
$( "#esMipreventDefault" ).click(function(
event ) {
event.preventDefault();
379
alert( "No he abierto el enlace sino una venta-
na: El valor de isDefaultPrevented es: " event.
isDefaultPrevented() ); // true
});
….
….
Ejemplo10-event/#event.isDefaultPrevented
Aula Mentor
Atributo .event.stopPropagation()
Descripción Previene que se ejecute cualquier evento que
pudiera estar asociado a los padres del ele-
mento dentro del árbol DOM. Muy útil para
evitar las propagaciones jerárquicas entre ele-
mentos del evento en cuestión.
380
M3. JQUERY
Ejemplo ….
….
<a name="event.stopPropagation"></a>
<h3><a href="#event.stopPropagation">event.
stopPropagation (Activado en el div)</a></
h3>
<div id="midiv">
</p>
</div>
….
381
….
$("#mispan").click(function(event){
event.stopPropagation();
});
$("#mip").click(function(event){
});
Aula Mentor
$("#midiv").click(function(){
});
Ejemplo10-event/#event.stopPropagation
382
Atributo .event.isPropagationStopped()
Descripción Devuelve si el método anterior stopPropaga-
tion() ha sido llamado.
M3. JQUERY
Ejemplo ….
….
<button id="mibutton">Púlsame</button>
<div id="midiv3"></div>
….
….
function estaParadaLaPropagacion(
event ) {
if ( event.isPropagationStop-
ped() ) {
} else {
$( "#mibutton" ).click(function(event) {
estaParadaLaPropagacion( event );
event.stopPropagation();
Aula Mentor
$( "#mibutton" ).click(function(event) {
estaParadaLaPropagacion( event );
event.stopPropagation();
estaParadaLaPropagacion( event );
});
Ejemplo ….
http://localhost/MOD3.JQUERY/U6/Ejem-
plo5-eventos-mouse/
….
Resumen Ejemplo visto anteriormente, donde obtene-
mos las coordenadas del ratón dentro de un
rectángulo azul.
Atributo event.stopImmediatePropagation()
Descripción Previene que se ejecuten otras acciones que
estén asociadas al evento.
Ejemplo ….
…. 385
….
$("#midiv4").click(function(event){
event.stopImmediatePropagation();
});
$("#midiv4").click(function(event){
….
});
$("#midiv4").click(function(event){
Aula Mentor
$("#mip4").click(function(event){
});
$("#mip4").click(function(event){
event.stopImmediatePropagation();
});
Resumen En este ejemplo vamos a usar dos veces el
evento en situaciones diferentes para com-
386 prender mejor su funcionamiento. Vamos a
tener un identificador midiv4 que vamos a
llamar varias veces con el evento .click, vere-
mos que si tenemos comentada la llamada al
evento event.stopImmediatePropagation(); se
ejecutarán los tres eventos seguidos uno de-
trás de otro y en ese orden. Si en el prime-
ro realizo event.stopImmediatePropagation();
solo se ejecutará el primer click. Si lo pongo
en el siguiente click se ejecutará hasta ahí.
Atributo .event.isImmediatePropagationStopped()
Descripción Devuelve si el método anterior stopImmedia-
tePropagation() ha sido llamado.
M3. JQUERY
Ejemplo ….
….
<button id="mibutton5">Púlsame</button>
<div id="midiv5"></div>
….
….
function estaParadaLaPropagacionIn-
mediata( event ) {
if ( event.isImmediatePropaga-
tionStopped() ) {
} else {
$( "#mibutton5" ).click(function(event)
{
estaParadaLaPropagacionInmediata( event );
event.stopImmediatePropagation();
Aula Mentor
estaParadaLaPropagacionInmediata(
event );
});
Atributo .event.target
Descripción Se refiera al elemento DOM que inició el
evento
388
M3. JQUERY
Ejemplo ….
….
<div id="midiv6">
<p id="mip6">
<span id="mispan6">Soy
una etiqueta un span
</span>
</strong>
</p>
</div> 389
….
….
});
Atributo .event.timeStamp
Descripción Número en milisegundos desde el 1 de ene-
ro de 1970, desde que el evento fue lanzado.
Muy útil para comprobar tiempos de ejecu-
ción de nuestros script.
Ejemplo …
<div id="midiv7">
<button id="mibuttonReset7">Resetear
temporizador y
vueltas.</button>
</div>…
if ( tiempo ) {
} else {
vuelta++;
if(!iniciadoTemporizador){
M3. JQUERY
alert("INICIADO TEMPORIZA-
DOR");
tiempo = event.timeStamp;
$( "#mibutton7").text("Pulsa
aquí para contar vuelta");
iniciadoTemporizador = true;
});
$( "#mibuttonReset7").click(function(event){
tiempo = event.timeStamp;
vuelta = 0;
$( ".cuentaVueltas").remove(); 391
});
Atributo .event.which
Descripción Cuando estamos usando evento de entrada
(teclado o ratón), con event.which podemos
detectar qué botón ha sido pulsado, si es del
ratón, el botón derecho, el izquierdo o el có-
digo de la tecla del teclado.
M3. JQUERY
Ejemplo …
<div id="milog8"></div>
</label>
<div id="midiv8"></div>
if(event.which == 1)
$("#midiv8").append("<br>Has pre-
sionado el botón izquierdo: " +
event.which);
else if (event.which == 2)
$("#midiv8").append("<br>Has pre-
sionado el botón
central/ruedaderecho: " +
event.which);
else if (event.which == 3)
$("#midiv8").append("<br>Has pre-
sionado el botón derecho: " +
Aula Mentor
event.which);
else
$("#midiv8").append("<br>Has pre-
sionado otro botón de tu
});
394
Puedes visitar el ejemplo10-event/#event.
which
Resumen En este ejercicio nos creamos un input de
máximo un carácter para ver que código es el
que corresponde. Debemos recordar que cada
tecla corresponde a un código y este código
es el que indicará al sistema operativo qué
tecla ha pulsado. Usamos para ello el even-
to .keydown en la forma .on("keydown"….
Como vimos en otras ocasiones y añadimos el
mensaje a un div que me he creado para mos-
trar el resultado, podíamos usar otra etiqueta
y otra forma.
.bind()
Este método es uno de las más importantes de jQuery, ya que podemos asociar fun-
ciones a eventos de elementos tanto del DOM como del navegador, en principio puede dar la
sensación de hacer lo mismo y en parte tiene el mismo resultado, lo bueno que nos facilita una
opción que de la otra forma no podíamos usar, y es asociar eventos simultáneamente, pasar
parámetros a eventos o lanzar nuestros propios eventos.
Veamos un ejemplo, para asociar el evento .onclick a un elemento HTML podíamos usar:
$("miseleccion").click(function(event){
//Mis acciones
});
Por ejemplo:
395
$("#midiv9").click(function(event){
});
Si queremos que cuando el usuario pase el ratón por encima del elemento, al hacer click
o doble click, realice unas acciones; en este caso mostrar una ventana, podemos usar la lista de
eventos como primer parámetro seguido de espacio y todos ellos entre comillas:
alert("Has pasado el ratón por el elemento, click o doble click sobre él.");
});
Dado el ejemplo mostrado, para poder realizar click o doble click, debemos cerrar la
ventana con el teclado y no con el ratón, sino no podremos detectar el evento click o doble click
al salirnos del área del elemento y activar nuevamente el evento mouseover.
.unbind()
Aula Mentor
Con este método podemos desenlazar un evento del elemento que deseemos. Por ejem-
plo, si queremos dejar de ejecutar cierto evento en algunas circunstancias podemos hacerlo.
Puede ser muy útil cuando queramos evitar que el usuario realice algunas acciones sobre nues-
tros elementos HTML y tener el control de cuándo se puede o no se puede lanzar un evento.
Vamos a ver el siguiente ejemplo, donde vamos a tener tres botones, un botón que mos-
trará una ventana miButton y otros dos para activar/desactivar el evento click del primer botón,
en el HTML tendríamos:
...
<label>Cuando actives el evento Click y pulses sobre el botón, aparecerá una ventana</label>
<br>
...
En el CSS:
396
#activaClick{
background-color: lime;
#desactivaClick{
background-color: orange;
Y en el jQuery :
M3. JQUERY
function funcionClick() {
$( "#activaClick" ).click(function() {
$( "#miButton" )
});
$( "#desactivaClick" ).click(function() {
$( "#miButton" )
});
Como vimos anteriormente en un ejemplo, podemos usar esta definición para manejar
los eventos de nuestros elementos, en vez de dotar al elemento HTML del evento de la forma:
seleccion.click(… ). Se pueden pasar varios eventos de la forma anteriormente comentada.
Events: son los eventos que se buscan asociar al conjunto de elementos selecciona-
dos. Se pueden pasar una lista de eventos.
Data: indica cualquier tipo de datos que se necesite pasar al manejador cuando s e
dispara el evento. Es también un parámetro opcional y, por lo general, se corresponde con
un objeto jQuery.
Aula Mentor
function miaccion() {
});
398
Una ventaja de usar el método .on() entre otras cosas es que podemos agregar varios
eventos de una vez, especificándolos de una vez:
Y también al igual que pasaba con otros métodos, es una buena práctica separarlos y si
hubiera que hacer acciones diferentes poder hacerlo separando los eventos por llaves y comas,
si por ejemplo tuvieramos el evento click y el evento dblclick, de una selección específica #miI-
dentificador y .miclase tendríamos:
$('#miIdentificador .miclase').on({
click: function() {
},
dblclick: function() {
}
M3. JQUERY
});
Al igual que con .on podemos agregar eventos, podemos usar este nuevo evento para
eliminar los eventos que tenga nuestro elemento html.
Podemos pasar también una lista de eventos al igual que pasaba con el anterior, un ejem-
plo puede ser agregar un botón auxiliar donde eliminemos los eventos que antes le hayamos
proporcionado:
<br>
<br>
<button id="miButton11">Púlsame para eliminar los eventos .mouseover y .click del parrafo anterior.</
button> 399
$('#mip11').on({
mouseover: function() {
$(this).css("background-color", "lime");
},
click: function() {
});
//Ahora preparamos todo para que al pulsar el botón eliminemos los eventos
$('#miButton11').click(function() {
$('#mip11').off("click mouseover");
Aula Mentor
$('#mip11').css("background-color", "#F3E2A9");
});
Con este evento podemos controlar la ejecución de nuestro script una sola vez, y aunque
el usuario o el navegador intentara volver a ejecutarlo, no tendría ningún efecto. Veamos un
ejemplo sencillo donde al pulsar un botón mostramos mensaje; aunque el usuario pulse poste-
riormente el mismo botón no tendrá ningún efecto.
<button id="miButton12">Púlsame las veces que quieras, yo solo me ejecutaré una vez.</button>
Y en el jQuery:
$('#miButton11').one("click",function(){
alert("Has podido abrir una ventana, ya no podrás ejecutar más este evento en el elemento ");
});
400
Ahora veremos un ejemplo un poco más complejo pero más divertido, muchas veces
podemos "jugar" con los eventos para crear al usuario algo divertido y crear un juego, aunque
debemos pensar también en las aplicaciones que podrían tener para nuestras aplicaciones web.
Debes estar muy atento a este ejemplo, ya que tocamos muchos aspectos, CSS, HTML,
selectores, eventos, jQuery, etc y uniéndolo todo podemos crear una aplicación mucho más
compleja. Supongamos que queremos crear el siguiente juego.
Vamos a usar algunas funciones especiales que nos ofrece JavaScript, como es la gene-
ración de números aleatorios con el método Math.random(), este método nos genera un nú-
mero aleatorio, en nuestro ejemplo, vamos a crear un tablero donde aleatoriamente aparecerán
elementos con mina o sin mina. Tengo que adaptar un poco el método random() ya que me
genera un número decimal comprendido entre 0 y 1, por ejemplo si usamos la siguiente función
obtendremos un valor booleano (verdadero/falso o true/false) aleatorio, que es exáctamente lo
que queremos. Otro punto importante que vamos a usar en este ejemplo es la visualización,
seguimiento o depuración de nuestro programa, para ello nos vamos a ayudar de mensajes por
consola. Para ello, usamos dentro de nuestro código console.log("texto"), y así podemos ir
realizando una traza y comprobar que con que datos o variables está funcionando nuestro script:
function aleatorioBoleano(){
return true;
}else{
return false;
401
Ahora debemos crearnos un tablero, para ello vamos a usar en este ejemplo <div></div>
con una sintaxis concreta, dos tipos de cajas, unas ConMina y otras SinMina para ello vamos a
tener los siguientes elementos:
También tendremos que tener unas variables para controlar el número de errores, en
principio se ha puesto un número fijo de 7, pero se podría pedir por un <input type="text", etc.
Para generar el tablero hemos decidido crear un sitio donde indicar al usuario el número
de errores actuaesl, y nos tendremos que crear un tablero de 6x6, es decir 36 elementos posible
donde podrá hacer click el usuario:
Aula Mentor
...
<label>Algunas valdosas tienen una mina, haz click y si salen de color verde no te preocupes puedes
continuar</label>
402
<div id="tablero"></div>
...
width:600px; }
height:600px; .midiv13-mini-Sin {
} background-color: #F3E5A9;
.midiv13-mini-Con { width:94px;
} 403
Una de las ventajas de usar jQuery es crear elementos dinámicamente en tiempo de eje-
cución, por lo que no es necesario crear 36 <div> uno a uno escribiendolo en el código, pode-
mos crearnos una función que genere un número aleatorio, y devuelva verdadero o falso (true/
false) en cada interacción y crear en ese momento nuestro elemento que va a ser una mina o
sin mina. Para ello usamos como hemos usado en otras ocasiones el método .append que nos
añade HTML desde jQuery y en vez de crearlo manualmente, que sería lo mismo que insertar el
código en el HTML, llamamos mejor a una función que nos creará el código automáticamente
en cuestión de milisegundos:
function creaJuego() {
if(aleatorioBoleano())
$(this).append("<div class='midiv13-mini-Sin'></div>");
else
$(this).append("<div class='midiv13-mini-Con'></div>");
};
}
Aula Mentor
$('#tablero').append(creaJuego);
Simplemente hemos creado un bucle for, donde creará 36 elementos, en cada interac-
ción llamo a la función que nos devolvía un valor aleatorio aleatorioBoleano() y dependiendo
de si es verdadero o falso, creo un elemento <div> de una forma u de otra. Hemos usado <div>
pero debemos saber a estas alturas, que podríamos agregar las etiquetas que creamos conve-
nientes, o usar <article>, <section>, etc.
Ya tenemos los elementos y el tablero creado, ahora debemos darle la interacción con
el usuario (eventos), para ello, nos vamos a crear el evento .click por ejemplo, se podría usar
.mouseover para hacerlo más dinámico o rápido, o cualquier otro que deseemos. Lo importante
de este ejemplo es que queremos usar el evento .click sólo una vez, por lo que debemos usar
el evento .one() y así nos aseguramos que el usuario sólo puede pulsar una vez sobre nuestro
elemento. Para ello, buscamos los elementos para su clase y los dotamos de los eventos .click
y dependiendo de si el elemento "tiene Mina" o no, lo ponemos de un color u otro. Para ello,
vamos a modificar los elementos CSS desde jQuery, aunque más adelante veremos más cosas, a
modo introductorio sería modificar las propiedades descritas de elemento HTML dinámicamente,
tendríamos por tanto:
$('.midiv13-mini-Sin').one("click",function(){
$(this).css("background-color", "lime");
});
404 $('.midiv13-mini-Con').one("click",function(){
$(this).css("background-color", "red");
errorUsuario();
});
Hemos usado .one y cambiamos el color para indicar al usuario si ha acertado (lima-
lime) o no (rojo-red). En caso que haya hecho click debemos ir contando los errores que va
cometiendo el usuario con la función errorUsuario(), para ello, nos hemos creado unas variables
con un límite de errores y con los errores acumulados. Por tanto tendríamos:
var errores_acumulados = 0;
var limite_errores = 7;
function errorUsuario(){
errores_acumulados++;
reiniciaJuego();
La función reiniciaJuego() realiza varias acciones muy interesantes, que aunque ya he-
mos visto anteriormente, aquí podemos ver un ejemplo más en una aplicación real.
function reiniciaJuego(){
405
//Ponemos a cero los errores acumulados
errores_acumulados = 0;
$(".midiv13-mini-Sin").remove();
$(".midiv13-mini-Con").remove();
$('#tablero').append(creaJuego);
$('.midiv13-mini-Sin').one("click",function(){
$(this).css("background-color", "lime");
});
Aula Mentor
$('.midiv13-mini-Con').one("click",function(){
$(this).css("background-color", "red");
errorUsuario();
});
Hemos decidido borrar todos los elementos con el método .remove(), poner el contador
de errores a 0, modificar el mensaje que mostraba los errores a 0 y volvemos a crear todo de
nuevo, lo debemos hacer porque si no añadimos esto:
$('#tablero').append(creaJuego);
No nos crea las valdosas o elementos <div>. Y si añadimos lo anterior pero no añadimos:
$('.midiv13-mini-Sin').one("click",function(){
$(this).css("background-color", "lime");
});
406 $('.midiv13-mini-Con').one("click",function(){
$(this).css("background-color", "red");
errorUsuario();
});
Crea las valdosas o elementos <div> de forma aleatoria y todo, pero no escuchamos el
evento .click de cada elemento, por lo que no podríamos interactuar con los elementos que
hemos creado nuevo. Debemos pensar que hemos empezado desde 0 con el juego y tenemos
que asegurarnos de poner las variables y los elementos como al principio.
Repasa todos los conceptos y elementos y asegúrate de entender todo antes de conti-
nuar, ya que es un ejemplo muy completo de todas las cosas que podemos hacer con los mó-
dulos vistos hasta ahora HTML5, CSS3 y jQuery.
7. Atributos.
Como hemos visto hasta ahora, con jQuery podemos seleccionar de forma masiva o de
forma concreta los elementos de nuestra aplicación web. Ahora una forma de darle más dinanis-
mo es el uso de atributos, modificando, añadiendo o eliminando según nos interese. Es decir,
M3. JQUERY
podemos modificar los elementos y los atributos de estos, eliminar o añadir nuevas clases o
permutarlas.
Podemos añadir nuestras clases a los elementos en tiempo real, por ejemplo imaginemos
que tenemos nuestro archivo CSS3 donde tenemos una clase que se llama colorPreferido y, en
ella, tenemos un color de fondo que se usará cuando el usuario haga mouseover sobre el ele-
mento. Para ello usamos:
Función Especifica una función que devuelve uno o varios nombre de clases que
se desea añadir.
.miColorPreferido{
background-color: lime;
Y en jQuery tendríamos:
$(document).ready(function(){
$('#addMiClase').mouseover(function(){
$(this).addClass('miColorPreferido');
});
Bueno, aunque a simple vista pensarás, ¡vaya! Pero si esto lo sé hacer, he de decirte que
llevas en parte razón. El efecto para el usuario puede ser igual que haber utilizado directamente
desde CSS el evento hover, o tantas otras formas. Debemos entender lo siguiente, en tiempo de
ejecución de nuestra aplicación web he añadido una clase a la selección de los elementos de mi
documento. Inicialmente esa clase no existe en el documento CSS, y esto me da mucho más
Aula Mentor
Al igual que hemos realizado anteriormente, podemos eliminar una clase a un elemento
en tiempo de ejecución de la aplicación.
.removeClass
Siguiendo con el ejemplo anterior, podríamos eliminar la clase una vez que el usuario
realice el mouseout del elemento HTML. Tendríamos por tanto el mismo código en el HTML y en
el CSS, pues si estamos trabajando de forma estructurada la mayoría de las veces sólo debemos
cambiar el jQuery.
$(document).ready(function(){
$('#addMiClase')
.mouseover(function(){
$(this).addClass('miColorPreferido');
})
408 .mouseout(function(){
$(this).removeClass('miColorPreferido');
});
Para apreciar realmente qué está haciendo el navegador debemos usar el modo depura-
dor (F12), buscar el elemento y ver los estados que pasan sobre él:
Al pasar el ratón por encima y lanzar el evento .mouseover de la selección en este caso,
con id="addMiClase" me cambia al siguiente código HTML:
M3. JQUERY
Hemos decidido en nuestro script jQuery, eliminar la clase cuando se active el evento
mouseout, el cual me elimina la clase asignada y vuelve a tener los valores que tuviera por de-
fecto el elemento HTML:
...
$('p')
.mouseover(function(){
$('p').addClass('miColorPreferido');
})
.mouseout(function(){
Aula Mentor
$('p').removeClass('miColorPreferido');
});
...
El efecto al pasar el ratón será sobre todos los elementos que contengan el elemento:
Si en vez de usar directamente 'p' usamos this se activará sólo en el elemento que esté
llamando al evento en cada momento:
410
7.1.3. Permuta de Clases.
toggleClass(clase)
Función: Especifica una función que devuelve el nombre de la clase que se tiene
que permutar.
Conmutador: Valor booleano (true/false) que determina si la clase se tiene que añadir o
elminar.
Ejemplo de toggleClass
...
...
.txtBlue{
color: blue;
}
411
.bkgOrange{
background: orange;
En jQuery tendríamos:
...
$( "p" ).click(function() {
});
...
7.2. Leer.
Ahora debemos pensar que con la lectura de atributos de las etiquetas HTML podemos
acceder al valor usando la siguente sintaxis:
$("selección").attr("atributo_a_leer")
...
<div id="resultado"></div>
...
$( "#dimeValor" ).click(function() {
});
...
Y a partir de cada pulsación en el botón Dime valor del atributo siempre nos dará el mis-
mo resultado, independientemente del texto que haya escrito en el <input> del formulario, este
punto es el que debemos entender, estamos accediendo a los atributos que hay en la etiqueta.
...
<div id="resultado2"></div>...
$('.miEnlace').each(function(i){
});
413
7.3. Editar.
Además de poder leer los atributos, podemos editarlos, consiguiendo así interaccionar
con los elementos más todavía, para realizarlo debemos usar una función que sobreescribe el
método .attr en este caso con dos parámetros:
$('miSeleccion').attr("atributo", "valor");
...
Tenemos una aplicación web donde tenemos muchos link a una página, pero en este
momento nos han comunicado que por problemas en el servidor no va a estar operativa, y claro,
queda muy mal tener una web con los enlaces "rotos", por lo que vamos a coger en todos los
sitios donde tenemos enlace a esa web, y sustituirla por otra, sin tener que ir link por link. Con
jQuery podemos hacerlo sin tocar el código HTML y todo de golpe:
$(".modificaAtributos").attr("href","http://www.mentoremprende.es");
Si ejecutas la aplicación, verás que has modificado todos los enlaces a páginas web por
el nuevo, sin tener que saber ni siquiera cuantos hay y donde están. Como puedes ver jQuery es
una herramienta muy potente, por ejemplo si quisieramos cambiar de una vez todos los enlaces
para que en vez de abrirse en una pestaña nueva con el atributo target="_blank" se abriera en
la misma página, con usar:
$(".modificaAtributos").attr("href","http://www.mentoremprende.es");
414
$(".modificaAtributos").attr("target","_top");
Se pueden modificar los atributos de forma seguida como acabamos de realizar, pero
jQuery nos proporciona una forma más limpia para este caso y es pasar parejas de atributos/
valor separados por comas y con el siguiente formato:
Se pueden pasar muchas parejas de atributo/valor, en este caso sólo hemos pasado dos,
pero se podrían pasar muchos más. Quedando el ejemplo que estamos realizando de la siguien-
te forma:
$(".modificaAtributos").attr({"href":"http://www.mentoremprende.es", "target":"_top"});
7.4. Añadir.
Hemos comprobado que con jQuery podemos leer los atributos de los elementos HTML,
modificarlos, pero existirán casos que debamos añadir atributos, y claro está podemos hacerlo
simplificando mucho el código, para ello podemos usar el método .attr pero esta vez pasándoles
dos parámetros, el primero con el nombre del atributo que queremos añadir y como segundo
parámetro la función que debe devolver el valor a asignar dicho atributo.
M3. JQUERY
$("miseleccion").attr("atributo", function(indiceArray){ })
Imaginemos que tenemos nuestros formularios y tenemos varias clases creadas, por
ejemplo para los campos que son de texto, queremos agregarle el atributo placeholder y un
texto orientativo, por ejemplo, introduce un texto. Además tenemos otros campos de tipo fecha,
el cual vamos a rellenar con la fecha actual para facilitar al usuario rellenar el campo, para ello,
vamos a añadirle el atributo value con la fecha actual. Como veremos, no tenemos que saber
donde está en el código, ni a cuantos elementos va a afectar, ya que como he estructurado muy
bien la web puedo hacer todo este tipo de acciones de un vez.
<br><label>Introduce tu nombre</label>
415
<br><label>Introduce tu segundo apellido</label>
Ahora vamos a añadir los atributos placeholder y value a nuestros elementos, para ello
podemos realizar el siguiente código:
$(".campoFecha").attr("value", function(indiceArray){
});
$(".campoTexto").attr("placeholder", function(indiceArray){
Aula Mentor
return miTexto;
});
Hemos usado los métodos siguientes para obtener el día, mes y año respectivamente:
.getDate, .getMonth() y .getFullYear() los cuales los hemos asociado a una fecha variable de tipo
Date() y hemos tenido que crear un objeto nuevo, por ello hemos usado new Date().
7.5. Eliminar.
Imaginemos ahora que hemos agregado una sugerencia de texto indicando al usuario
qué campos de un formulario son obligatorios, y por algún motivo debemos eliminarlos direc-
tamente:
<br><label>Introduce tu nombre</label>
$(".miFormulario").removeAttr("placeholder");
El resultado sería que nos ha eliminado en una sola línea todos los atributos placeholder
del documento, quedando de la siguiente forma.
$(".miFormulario").removeAttr("placeholder");
417
8. Resumen.
- jQuery es una biblioteca de JavaScript, creada inicialmente por John Resig, que permite sim-
plificar la manera de interactuar con los documentos HTML, manipular el árbol DOM, mane-
jar eventos, desarrollar animaciones y agregar interacción con la técnica AJAX a páginas web.
- Con jQuery tenemos también un conjunto de selectores y filtros para elegir a qué elementos
del documento van a afectar nuestras acciones. Tendremos por tanto los selectores de eti-
queta o elemento, identificador y clase, entre otros muchos más de tipo parental y de posición
respecto a otras etiquetas.
- Para interactuar con el usuario jQuery proporciona "eventos" que serán disparados o detec-
tados por diferentes circunstancias. Podemos capturar eventos de los siguientes elementos:
del ratón, del teclado, de los formularios, del documento o del propio navegador.
Aula Mentor
El objeto .event es aquel que tendrán todos los elementos que han sido lanzados. Éste además
de poder capturar sus propiedades y datos, podremos modificar el evento definido por defecto
con .event.preventDefault().
Otra funcionalidad que podemos hacer con jQuery en tiempo de ejecución es añadir, eliminar
o permutar clases y atributos, para ello tenemos:
En el módulo anterior hemos visto que con jQuery podemos seleccionar los elementos del do-
cumento HTML según nos interese, detectar los eventos que el usuario ha realizado y añadir,
modificar y eliminar nuevas propiedades y atributos a los elementos ya existentes. En esta uni-
dad vamos a ver ver cómo podemos interaccionar con los formularios que rellenen los usuarios
en nuestras aplicaciones Web con jQuery, y además seguir viendo más posibilidades de CSS3,
añadir más efectos y el uso de Ajax, Asynchronous JavaScript And XML ( JavaScript asíncrono y
XML).
1. Formularios. 419
Aunque en HTML5 tenemos muchas formas para poder revisar y controlar el contenido
que el usuario nos introduce en los formularios, tenemos que tener presente que con jQuery
podemos usar muchas más restricciones personalizadas y ayudas para evitar que introduzcan
datos erróneos o de carácter mal intencionados, pero éstas no eximen por parte del servidor
realizar las comprobaciones pertinentes. Podríamos decir que con jQuery vamos a ayudar
al usuario a rellenar el formulario con datos correctos en una primera instancia y le podemos
aconsejar, revisar y comprobar si cumplen alguna característica (por ejemplo si la letra del DNI
es correcta, ha introducido número o letras, etc).
En unidades anteriores vimos cómo podemos acceder a nuestras propias clases o iden-
tificadores:
Debemos pensar que con los selectores de jQuery podemos elegir con qué elementos
del documento HTML vamos a trabajar, y en el caso de los formularios, siempre podemos selec-
cionar qué tipo de elementos, por tanto tenemos además unas etiquetas que realizan un filtro
Aula Mentor
:input $( ":input" ).
<form>
<input type="checkbox">
<input type="file">
<input type="hidden">
<input type="image">
420
<input type="password">
<input type="radio">
<input type="reset">
<input type="submit">
<input type="text">
<select>
<option>Opcion 1</option>
<option>Opcion 2</option>
</select>
<textarea></textarea>
<button>Button</button>
M3. JQUERY
</form>
<option>Amarillo</option>
<option selected="selected">Azul</option>
<option>Verde</option>
<option selected="selected">Naranja</op-
tion>
<option>Gris</option>
<option>Blanco</option>
</select>
<option selected="selected">Naranja</op-
tion>
:disabled Seleccionamos los elementos del formulario que
sean del tipo disabled, por ejemplo aquellos ele-
mentos que sean declarados de la siguiente forma:
<input name="nombre" disabled="disabled">
En otras ocasiones del curso hemos comprobado que podemos acceder al valor de los
elementos de un formulario y realizar determinadas comprobaciones, por ejemplo: comprobar
si ha rellenado los campos antes de poder enviar el formulario. Si no queremos usar HTML5, y
preferimos usar jQuery (con la versión que da soporte a versiones antiguas de Internet Explorer 423
IE6, IE7 o IE8) tendremos que realizar nuestras propias validaciones con script propios. Siempre
tenemos esa opción "bajo la manga" pero muchas veces, se emplea demasiado tiempo en la
validación de datos que al fin y al cabo son tareas comunes en la mayoría de las web del tipo:
comprueba que el campo sea numérico, que no este vacío, si es un correo electrónico válido
(letras@letras.3letras), etc.
Con jQuery podemos usar un plugin que nos trae jQuery para la validación, que en de-
finitiva es un archivo de tipo js ( JavaScript) donde están creadas las validaciones:
http://plugins.jquery.com/validation/1.11.1/
Aula Mentor
Como podremos observar existe ya una nueva versión de validación 1.13.1. Cada dos
meses aproximadamente hay una nueva versión de jQuery ya que hay muchos desarrolladores
detrás haciendo mejoras. En la documentación de la web tenemos los requerimientos para poder
usar el plugin, en concreto para ésta hay que tener jQuery, y ha sido probado en las versiones
1.6.4, 1.7.2, 1.8.3, 1.9.1, 1.11.1 siendo ésta última la que estamos realizando en el curso.
Este tipo de archivo al igual que pasaba con el jQuery es una buena práctica tenerlo en
local o en un servidor que tenga mucha velocidad, ya que sino relantizaremos la comprobación
del formulario y el usuario podría pensar que es por problemas de la página. En nuestro caso,
nos vamos a descargar la versión y vamos alojar en nuestro servidor en la carpeta js/ donde te-
nemos los demás script.
Voy a explicar los pasos intermedios, porque es importante de donde ha salido la fuente
de todo y cómo hemos ido navegando hasta encontrar nuestro archivo, tal y como avanzan y
cambian las web, es mejor tener claro el proceso seguido, a dejar el link directo y pasados unos
meses y éste ya no funcione. De todas formas, en los recursos del curso, obtendrás los archivos
con los que se ha desarrollado el mismo, sino lo encontraras, pregunta a tu tutor.
Después de pinchar en Download now, nos aparecerá otra página web http://jqueryva-
lidation.org/ donde tendremos que seleccionar nuevamente Download y se nos descargará un
archivo con ejemplos, demos y los códigos fuentes. Y también nos podremos descargar exclusi-
vamente los archivos de validación.
424 Archivo jquery.validate que usaremos para validar los formularios cuando estemos reali-
zando el desarrollo de la aplicación web:
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/jquery.validate.js
Idem anterior pero en su versión mínima, sin espacios, tabuladores, comentarios etc,
para usar cuando tengamos la aplicación definitiva:
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/jquery.validate.min.js
Métodos adicionales donde podremos comprobar y validar más datos, por ejemplo, que
el número del banco sea correcto, que el código de IBAN que ha introducido el cliente corres-
ponde a un número correcto, formato de código postal, número de telefóno, etc. Esta versión
viene con comentarios, tabulaciones y saltos de página, por lo que es la que debemos usar
cuando estemos en la fase de desarrollo.
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/additional-methods.js
Idem anterior pero en su versión mínima, sin espacios, tabuladores, comentarios etc,
para usar cuando tengamos la aplicación definitiva:
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/additional-methods.min.js
Para usar este plugins de validación de formularios tendremos que hacer lo que hemos
realizado en varias ocasiones, linkarlo o enlazarlo desde nuestro documento, a la ruta donde
esté el archivo, en nuestro caso nos creamos una carpeta js, donde teníamos todos los script
almacenados. Debemos usarlo después de haber enlazado el fichero jQuery, en nuestro caso
M3. JQUERY
O de forma local:
Existen diferentes métodos que podemos usar para validar nuestros formularios, entre 425
los que destacamos:
dateISO: Devuelve true si el valor del campo es una fecha ISO válida, recordemos
426
maxlength: Devuelve false si el elemento es:
Y cuando usemos los métodos adicionales, tenemos otros tantos métodos, en los que
vamos a destacar:
427
bankaccountNL: Valida un número de banco con el formato:
123456789 or 12 34 56 789
Existen muchas comprobaciones y validaciones más indicadas para otros paises, (núme-
ro de teléfono de US, de UK, códigos postales, etc) y cada vez más se van realizando nuevas
incorporaciones, pero lo importante es saber que la mayoría de los datos que nos introduzca
el usuario podemos usar el plugin de jQuery-validate o usar sólo la parte necesaria en nuestra
aplicación web. Así, nos ahorramos programar algo que ya está programado y sobre todo com-
probado para no entrar en conflicto con otras partes de jQuery.
Ahora veamos un ejemplo de formulario y cómo usar algunas validaciones que nos pro-
porciona el pluging de jQuery: jquery-validate.js
Supongamos que queremos usar un formulario para que el usuario nos introduzcan sus
datos, por ejemplo el siguiente:
428
...
...
<div id="miformulario">
<form action=''>
<div>
<label for="name">Nombre:</label>
</div>
<div>
M3. JQUERY
<label for="surname">Apellidos:</label>
</div>
<div>
<label for="email">Email:</label>
</div>
<div>
</div>
<div>
</div>
<div>
<label for="password">Contraseña:</label>
</div>
<div>
<label for="observaciones">Comentarios:</label>
</div>
<div>
</div>
</form>
</div>
...
...
Para poder usar el plugin de validación debemos llamar al método validate después de
realizar la selección, y posteriormente la opción que vayamos a comprobar, (email, url, etc).
También debemos decirle las reglas ("rules") utilizadas para validar los datos introducidos por el
usuario.
$('miseleccion').validate( {
430
rules:{
nombre1:{
//opciones
},
. . .
. . .
nombreN:{
//opciones
},
messages:{
nombre1:{
M3. JQUERY
//opciones y mensajes
},
. . .
. . .
nombreN:{
//opciones y mensajes
},
success:{
});
Existen más opciones que se pueden usar con validate y al igual que messages y success 431
son opcionales, la más importante sería rules ya que define nuestras reglas sobre los elementos.
Estos han de estar definidos con el atributo name para poder referirnos a él posteriormente, si
nos fijamos hemos distinguido a modo de ejemplo el nombre del campo del nombre de identi-
ficador para no confundir qué elemento va a llamar y usar el método validate.
Si queremos que este campo sea requerido y el usuario lo rellene para poder enviar el
formulario deberíamos de hacer:
$(document).ready(function(){
$('#miformulario form').validate({
rules:{
nombre:{
required: true,
}
Aula Mentor
});
Debemos ser muy meticulosos, ya que el 90% de los errores cuando no funcionan las
validaciones es por uso incorrecto de la sintaxis o el uso de la selección de los elementos. Con
este ejemplo, se selecciona aquel documento HTML que tenga un identificador "miformulario" y
sea formulario "form". Una vez que tengas esos elementos, vamos a validarlo .validate para com-
probar las siguientes reglas rules: comprueba el siguiente nombre de entrada de texto nombre
y ahora quiero que este campo nunca este vacío, lo que es lo mismo, sea requerido para poder
enviar el formulario. Si pulsamos el botón enviar sin escribir nada en el campo de nombre nos
aparecerá un mensaje global como podemos ver en la siguiente imagen:
Este mensaje "This field is required" nos indica que el campo en cuestión es requerido,
432 pero podemos elegir nosotros nuestros propios mensajes, para ello debemos añadir más cosas
a nuestro archivo jQuery, por ejemplo si queremos decir en Español "*Introduce tu nombre, este
campo es obligatorio" debemos usar:
$('#miformulario form').validate({
rules:{
nombre:{
required: true,
},
messages:{
nombre:{
}
M3. JQUERY
});
Y si ahora le damos al botón enviar y el formulario de validación nos devuelve false nos
aparecerá el siguiente mensaje:
Y como ya sabemos CSS3, puede añadirle un poco de estilo, para hacer más llamativo el
mensaje al usuario. Para ello, podríamos usar el siguiente código:
. . .
. . .
Y en mi archivo CSS:
.mierror{
color: red;
433
Y ahora cada vez que mostremos un error, al usuario le aparecerá el texto de color rojo,
como se puede ver a continuación:
Sigamos con las validaciones de nuestro formulario, por ejemplo para el campo Apellidos
vamos a obligar que también sea obligatorio, pero que tenga al menos 3 caracteres. Se puede
concatenar validaciones poniéndolas dentro de las validación del elemento:
$('#miformulario form').validate({
rules:{
nombre:{
required: true,
},
apellidos:{
minlength: 3,
required: true
Aula Mentor
},
messages:{
nombre:{
},
apellidos:{
}
434
});
Debemos tener en cuenta que hemos añadido una coma a continuación para poder se-
guir llamando elementos del formulario, y para añadir más validaciones que también las hemos
separado por comas. En este ejemplo, en el campo apellidos estamos realizando dos validacio-
nes: una que sea required en el campo y sea rellenado obligatoriamente y otra que tenga un
mínimo de 3 caracteres minlength. Por tanto tenemos la posibilidad de mostrar dos mensajes,
uno para cada validación.
A partir de ahora me voy a centrar sólo en las validaciones del elemento en cuestión y
no mostraré las demás para facilitar el aprendizaje y no repetir código pues tienes el ejemplo
completo y resuelto en los recursos del curso, sólo debemos aprender a usar las validaciones
ya que es recomendable que intentes realizar desde cero la validación de un ejemplo similar al
propuesto sin usar el código resuelto, y posteriormente si tuvieras dudas, usar el código como
apoyo.
<div>
<label for="email">Email:</label>
</div>
M3. JQUERY
$('#miformulario form').validate({
rules:{
email:{
email: true,
},
messages:{
email:{
});
Para validar el número de iban que nos ha introducido, debemos usar: 435
$('#miformulario form').validate({
rules:{
banco:{
iban: true,
},
messages:{
banco:{
});
Aula Mentor
Para validar una página web, que comience por http://.... o ftp://...podríamos usar:
$('#miformulario form').validate({
rules:{
web:{
url: true,
},
messages:{
web:{
436 });
$('#miformulario form').validate({
rules:{
password:{
rangelength: [6,12],
required: true,
},
messages:{
password:{
});
. . .
. . .
Y en el jQuery:
}else{
$('#observacionesId').keydown(function(e){
caracteresOcupados = $('#observacionesId').val().length;
actualizaCaracteres(valorMaximo, caracteresOcupados);
});
Es una forma aproximada para indicar al usuario cuántos caracteres le queda, si nos
fijamos, sólo hemos usado el evento .keydown del textarea para detectar que ha presionado la
tecla, y en cada pulsación, calculamos la longitud, para ello usamos $('#observacionesId').val().
length y llamamos a otra función que nos hemos creado que se llama actualizaCaracteres(val
438 orMaximo, caracteresOcupados) y en ella, actualizamos el número de caracteres restantes que
nos quedan y comprobamos si el valor es positivo o negativo, y dependiendo de él ponemos el
texto de color rojo.
2. CSS3.
El uso de CSS3 y jQuery en las aplicaciones web, nos permite modificar, añadir y eli-
minar propiedades de estilo y tener un control no sólo del documento HTML como tal, sino
también de diseño del mismo. Algunas propiedades las hemos visto en apartados anteriores,
para facilitar y enriquecer los ejercicios; ahora veremos como acceder a las propiedades y qué
métodos son los más usuales para trabajar jQuery y CSS.
$('miseleccion').css('propiedad')
M3. JQUERY
De esta forma si tenemos un archivo CSS con nuestras propiedades definidas, podemos
acceder a todas ellas desde jQuery. Imaginemos que tenemos una hoja de estilo con las siguien-
tes definiciones de propiedades:
.mitexto{
color: blue;
background-color: white;
<div class="mitexto">
</div>
. . .
439
var mipropiedad1_CSS = $(".mitexto").css('color');
. . .
Si nos damos cuenta no nos ha devuelto la palabra que esperábamos blue, pero si nos
ha devuelto el mismo significado con otra notación, recuerda que en módulos anteriores tenía-
mos varias formas de indicar al navegador los colores. Hay en internet diversas formas y script
realizados para transformar de unas notaciones a otras, lo importante es que hemos accedido a
las propiedades de nuestra hoja de estilo desde jQuery.
$('miseleccion').css('propiedad', 'valor')
Siguiendo con el ejemplo anterior, vamos a cambiar las propiedades, en concreto; vamos
a cambiar el color azul, por naranja y el color de fondo blanco, por gris. Como la forma de traba-
jar que estamos adquiriendo, no tenemos que modificar ni el archivo HTML, ni el CSS, sólo con
modificar nuestro script se hará todo automáticamente, estaríamos accediendo a las propiedades
CSS, y al documento HTML directamente para interactuar con él según necesitemos.
$(".mitexto").css('color','orange');
$(".mitexto").css('background-color','gray');
//Muestro los valores leidos nuevamente, ¡OJO! No modifica el valor del archivo CSS, solo del //navegador
En ocasiones necesitamos saber el tamaño de los objetos y las posicion dentro de una
página. Pensemos que tenemos una caja o capa (<div>) y queremos saber el tamaño que tiene,
tanto interno como externo (contando padding y bordes) para poder modificarla accediendo a
sus propiedades en CSS y saber dónde está situada respecto a la página, existen varios métodos
que nos ayudarán, estos son:
innerWidth(): Develve las dimensiones internas (anchura) del primer elemento que
haya en dicho objeto jQuery. Contando el padding pero no el borde.
- La posición siempre nos la devuelve con dos atributos "top" y "left" respecto de la esquina
superior izquierda.
Vamos a ver un ejemplo donde obtengamos todas esas medidas de un elemento, para
ello, tendremos dos elementos html, para facilitar el aprendizaje vamos a usar dos cajas una
dentro de la otra, definida de la siguiente forma:
<hr>
<div id="cajaPadre">
<div id="cajaHija">
</div>
441
</div>
<p id="valoresCajas"><p>
Y en nuestro archivo CSS tenemos definidas los siguientes identificadores, una para la
caja Padre y otro para la caja Hija:
#cajaPadre{
width: 400px;
height: 400px;
Aula Mentor
background-color: #EBEC99;
position: relative;
#cajaHija{
width: 200px;
height: 200px;
background-color: #DF9449;
position: absolute;
top: 50%;
left: 50%;
width: 50%;
Y ahora vamos sacar todos los datos de nuestros elementos HTML, en este caso nuestro
<div> cajaPadre y cajaHija. Para ello, vamos a usar el siguiente código en jQuery:
. . .
. . .
$('#valoresCajas')
443
.append("RESULTADOS")
.append("<hr>")
.append("<br>CAJA PADRE")
.append("<br>innerWidth: "+anchoCajaPadre)
.append("<br>innerHeight: "+altoCajaPadre)
.append("<br>outerWidth: "+anchoTCajaPadre)
.append("<br>outerHeight: "+altoTCajaPadre)
.append("<hr>")
.append("<br>CAJA HIJA")
.append("<br>innerWidth: "+anchoCajaHija)
.append("<br>innerHeight: "+altoCajaHija)
.append("<br>outerWidth: "+anchoTCajaHija)
.append("<br>outerHeight: "+altoTCajaHija)
444 . . .
. . .
Realmente en este ejemplo no sería necesario crear las variables para luego mostrarlas,
pero es una buena práctica que nos acostumbremos a usar variables en nuestros script, aquellas
veces que tengamos que usarlas varias veces o quede más claro el código, y facilite el posterior
mantenimiento/modificación del mismo por una tercera persona.
El resultado que obtenemos suponiendo que el elemento cajaPadre está dentro del
documento sería el que muestra la siguiente imagen. Debemos observar sobre todo los valores
respecto del documento, respecto del padre y las posiciones con y sin borde:
M3. JQUERY
Cuando tenemos un elemento scroll también podemos obtener la posición de los ele-
mentos respecto a este scroll, para ello disponemos de los siguientes métodos:
Veamos un ejemplo:
<h3>Posicionamiento en un Scroll</h3>
<hr>
<p>Mueve el scrollbar y obtén la posición del scroll vertical y horizontal en cada momento.</p>
445
<div id="miScroll">
<img src="img/jquery_logo.png">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div><br>
En el CSS, tendríamos:
Aula Mentor
#miScroll{
width:250px;
height:250px;
overflow:auto;
Y en el jQuery tendríamos:
$("#miScroll").scroll(function() {
});
446
El resultado sería el siguiente, nótese que hemos agregado una imagen con un tamaño
superior al ancho del scroll para poder ver el scroll horizontal:
3. AJAX.
Una de las innovaciones que ocurrió en el desarrollo de aplicaciones web fue la apari-
ción de AJAX, aunque realmente es una forma de desarrollar aplicaciones con una técnica con-
creta y que existía hace mucho tiempo antes, usando el método XMLHttpRequest de JavaScript
para realizar peticiones asíncronas al servidor. Últimamente ha habido un gran aumento y uso
de la misma, ya que la tecnología en sí lleva mucho tiempo usándose por desarrolladores web.
Ajax requiere un gran estudio del mismo y en este curso no vamos a poder profundizar debido
a la extensión y complejidad del mismo. Eso sí, vamos a ver una introducción del mismo, usar
algunas características con jQuery comprendiendo que también podemos interactuar con él y
coger una base por si queremos profundizar en otro momento mediante AJAX.
M3. JQUERY
3.1. Introducción.
A pesar de que el término «Ajax» (Asynchronous JavaScript And XML) fue creado en
2005 por Jesse James Garrett, en la historia de las tecnologías se remonta varios años antes con la
iniciativa de Microsoft en el desarrollo de Scripting Remoto (tecnología que permite a los scripts
que se ejecutan dentro de un navegador web intercambiar información con el servidor).
Ajax es una tecnología asíncrona, en el sentido de que los datos adicionales se solicitan
al servidor y se cargan en segundo plano sin interferir con la visualización ni el comportamiento
de la página. JavaScript es el lenguaje interpretado (scripting language) en el que normalmente
se efectúan las funciones de llamada de Ajax mientras que el acceso a los datos se realiza me-
diante XMLHttpRequest, objeto disponible en los navegadores actuales. En cualquier caso, no es
necesario que el contenido asíncrono esté formateado en XML.
Ajax es una técnica válida para múltiples plataformas y utilizable en muchos sistemas
operativos y navegadores dado que está basado en estándares abiertos como JavaScript y Docu-
ment Object Model (DOM). JQuery usaba de por sí varios métodos AJAX, uno que podemos ver
es el método .load(url, parámetros, callback), facilitando la tarea de enviar y recoger peticiones
asíncronas al servidor.
Supongamos un caso práctico, el navegador del cliente carga una página de mucho 447
"peso", es decir, tiene muchas imágenes y contenidos que ralentizan la carga del mismo, una
vez que ha conseguido cargarla en el navegador, supongamos que queremos hacerle una con-
sulta de nuevo al servidor, pensemos que nuestra web está compuesta por muchas secciones,
artículos y queremos sólo actualizar una sección, o una caja, o sólo una parte. ¿Tendríamos que
recargar nuevamente toda la página con el coste en tiempo y peticiones web al servidor y el
tráfico que generaría nuevamente al usuario?. Es una de las opciones que nos resuelve AJAX,
imaginemos el siguiente esquema web:
Aula Mentor
Si por ejemplo queremos mandar una variable al servidor para actualizar una sección,
pero sin tener que tocar nada de lo demás, tendremos que usar otros métodos y emplear AJAX
para resolverlo.
448
1. El servidor del cliente ha realizado una petición, en este caso el cliente quiere actualizar la
sección de las redes sociales.
2. El servidor procesa la información que le ha venido del cliente, (actualizar las redes sociales)
y depende de la acción puede necesitar hacer: consultar a bases de datos, a otros servidores,
páginas web, o resolver por si misma la petición porque tenga todos los datos para realizarlo.
3. El servidor finalmente manda los datos actualizados de esa sección al navegador del cliente,
pero no se han modificado, ni actualizado las demás secciones.
Una vez que tenemos claro qué es AJAX, podemos seguir con las tecnologías implicadas
para una aplicación con AJAX, estas serían:
1. JavaScript, para capturar las interacciones con el usuario o los eventos que deseemos aplicar,
ya sea el navegador, el ratón, etc. todos los eventos que podemos capturar del usuario.
M3. JQUERY
2. El objeto XMLHttpRequest, para permitir que las peticiones se realicen al servidor sin inte-
rrumplir otras tareas del navegador.
3. Archivos XML en el servidor u otros formatos de datos. Normalmente se suele usar HTML,
JSON, etc.
4. Nuevamente JavaScript, para recibir los datos que nos ha mandado el Servidor Web y mos-
trarlos correctamente en nuestra página.
jQuery proporciona soporte para Ajax, permitiendo abstraer las diferencias que pueden
existir entre navegadores, para ello tenemos los siguientes métodos: $.get(), $.getScript(), $getJ-
SON(), $.post() y $().load().
3.2. Preámbulo.
Debemos tener muy claros los siguientes conceptos para entender correctamente el uso
de los métodos anteriores:
Con GET, lo podemos usar cuando estemos obteniendo datos del servidor, pero no
estamos interactuando con él, son peticiones del tipo "Dame o coge", Dame este dato, Dame lo 449
que encuentres de esta página, etc. Las solicitudes GET pueden ser almacenadas en la caché del
navegador, pudiendo conducir a un comportamiento impredecible si no se tiene en cuenta.
Con POST, se puede usar cuando estemos interactuando con el servidor, y ésta pueda
requerir agregar o modificar datos. Son peticiones del tipo "Recibe" estos datos, y dependiendo
del caso si por ejemplo es un alta de un usuario, los daremos de alta en nuestro servidor (inte-
ractuando con la Base de Datos, registros log, etc).
Podemos usar muchos tipos de archivos de datos diferentes, entre los que se encuentran:
- Texto. Para el envío de las cadenas de caracteres. Si recordamos cuando en los formularios
mandábamos varias variables, estas se enviaban en formato de texto plano.
- Html. Para transportar los trozos de código HTML que serán insertados/ubicados en la pá-
gina.
- Script. Fichero con código JavaScrip, por ejemplo añadir script nuevo o funciones nuevas
a nuestra página.
- Json. Para transportar información en formato JSON, incluyendo más información (cadenas
de caracteres, array y objetos). JSON, es un formato muy estándar y usado para el intercam-
bio de información, tanto de aplicaciones web, como de aplicaciones de dispositívos móvi-
les. http://es.wikipedia.org/wiki/JSON
Aula Mentor
- XML. Para transportar información en formato XML. Junto con JSON, son dos formatos muy
extendidos, usados a nivel web y de intercambio de información. Por ejemplo entre un ERP
(Enterprise Resource Planning) o incluso la tendencia en los bancos para comunicarnos con
ellos es usar archivos XML, como son los cuadernos que envían las empresas, como puede
ser la SEPA:
http://docs.oracle.com/cd/E39564_01/doc.91/e39169/fields_sepa_pay_file_appx.
htm#EOAEL00518
3.2.3. Sincronismo/Asincronismo.
Si tenemos varias llamadas de Ajax de modo asíncrono podemos tener varias peticiones
al servidor de manera paralela por lo que nos puede ayudar a cargar la información más rápida,
o podemos estar interactuando con varios elementos y cada elemento tardará el tiempo que
necesite en dar su respuesta o resultado.
3.2.4.1. $.get()
La sintaxis que podemos usar con jQuery para hacer consultas es la siguiente:
$.get(url[, datos][,función][,tipo])
Para ello utiliza la consulta HTTP GET siendo los parámetros siguientes:
url: Una cadena de caracteres que contiene la URL del archivo que se
quiere cargar.
3.2.4.2. $.post()
La sintaxis que podemos usar con jQuery para hacer consultas es la siguiente:
$.post(url[, datos][,función][,tipo])
Para ello utiliza la consulta HTTP POST siendo los parámetros siguientes:
url: Una cadena de caracteres que contiene la URL del archivo que se
quiere cargar.
3.2.4.3. $getScript()
La sintaxis que podemos usar para cargar un script usando el método HTTP GET y eje- 451
cutarlo sería el siguiente:
$.getScript(url[,función])
Donde:
url: Sería una cadena de caracteres que contiene la URL del script que
se quiere cargar.
3.2.4.4. $.ajax()
De los métodos existentes en jQuery para trabajar con AJAX, este es el que comprende
los demás métodos por lo que es una buena práctica el uso del método $.ajax en lugar de los
otros ya que ofrece más características y está al igual que las demás funciones jQuery para un
uso más comprensible.
Para configurar el método $.ajax lo haremos a través de un objeto, el cual contiene todas
las instrucciones que necesita jQuery para completar la petición. Se pueden especificar acciones
Aula Mentor
en caso que la petición haya tenido éxito o no, además, al estar configurado como un objeto, es
posible definir sus propiedades de forma separada, haciendo un código más legible, reutiliza-
ción de código y un mantenimiento más optimo.
http://api.jquery.com/jQuery.ajax
Por último comentar que existen muchos más métodos como ajaxSetup(parámetros)
o serialize() que nos ayuda en las consultas y en la serialización de datos. La serialización de
datos es muy importante para transformar todos los campos y parámetros de un formulario de
forma contínua en una cadena de caracteres. Por ejemplo en el siguiente caso, se enviaría al
servidor la siguiente cadena:
single=Single&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio1
AJAX y jQuery como vemos están integrados para poder funcionar conjuntamente en
nuestras aplicaciones web, no te preocupes si este apartado no lo has comprendido totalmente,
ya que solamente es una pequeña introducción y si nunca has usado AJAX, debes pensar que
son métodos nuevos y necesitaríamos más tiempo para poder comprenderlos. Si has usado antes 453
AJAX puedes profundizar en la documentación oficial y sacarle aún más provecho a tu manejo
de jQuery, si es la primera vez quédate con la idea principal y cuando dispongas de tiempo
siempre puedes retomarlo.
No debemos olvidar que el posionamiento de una página es hoy en día uno de los fac-
tores más importantes de cualquier aplicación web, ya que al existir muchas y crecer día a día
en número, es vital salir por delante en las búsquedas de las web competidoras, así los usuarios
eligirán antes la web que salga en los primeros resultados.
Pensemos que mucha información con AJAX sea cargada de forma asíncrona, cuando los
robots de los buscadores, por ejemplo de google pasaban a leer la información, no estan leyen-
do directamente el fichero como tal, ya que existen una cantidad de peticiones y respuestas para
completar la web en paralelo. Antiguamente no se indexaban correctamente y las web realizadas
en AJAX siempre salían detrás de las web no realizadas con AJAX.
Por todo esto, es muy importante pararnos y tener en cuenta este punto sobre AJAX,
puesto que tenemos que estudiar muy bien los casos en los que sería necesario, y en el caso
de usar AJAX, seguir unos métodos y pautas que existen para que no afecten a la indexación y
posicionamiento en los buscadores. Ya que si no los tenemos en cuenta, tendrémos una página
muy dinámica y rápida pero muy mal posicionada.
Aula Mentor
4. Efectos.
Un punto muy importante que no debemos olvidar al usar jQuery es el uso de efectos y
animaciones en nuestras aplicaciones web. Antíguamente cuando se veía una página web con
animaciones siempre se asociaba a Macromedia Flash Player, debido a que permitían un gran
abanico de efectos, animaciones y posibilidades. Hoy en día con jQuery podemos usar las ani-
maciones y efectos más típicos usados en las webs sin tener que obligar al usuario tener instala-
do la última versión de Adobe Flash Player. Este punto que a priori puede no tener importancia,
cuando estamos hablando de dispositivos móviles, sobre todo los Iphone a no ser que se instalen
aplicaciones externas no pueden ver las páginas web con Flash, con la consecuente pérdida de
usuarios que usan estos dispositivos.
Con estos métodos de jQuery .show() y hide(), podemos hacer aparecer y desaparecer
elementos HTML, pudiendo crear efectos ante el usuario muy interesantes. La sintaxis sería la
siguiente:
Ejemplos:
$('p').show()
$('.claseMostrar').show()
$('.claseMostrar').show('normal')
$('.claseMostrar').show('slow')
$('p').hide()
$('.claseOcultar').hide()
$('.claseOcultar').hide('normal')
M3. JQUERY
$('.claseOcultar').hide('slow')
. . .
<hr>
<div class="ocultar">
</div>
<hr>
<hr>
<div class="mostrar">
Aula Mentor
</div>
<hr>
456 . . .
. . .
var contador = 0;
$('#btnMostrar').click(function(){
//Mis acciones
contador = 0;
});
$('#btnOcultar').click(function(){
//Mis acciones
M3. JQUERY
contador = 0;
});
. . .
Y en el CSS:
.ocultar{
background-color: #F3E5A9;
.mostrar{
background-color: #F3E5A9;
El efecto será que dependiendo del botón que pulsemos, Mostrar u Ocultar, realizará una
acción u otra. Si nos fijamos la clase .mostrar no hace realmente nada en este script, ya que sólo 457
ponemos oculto/visible los elementos HTML que pertenezcan a la clase .ocultar. Es una buena
práctica aprovechar y utilizar los nombres cuando realmente tengan un sentido semántico, por-
que en un futuro, si necesitamos en vez de mostrar los elementos con la clase .ocultar queremos
ocultar los elementos que pertenezcan a la clase .mostrar tenemos la opción de hacerlo, porque
ya hemos dotado el código con la posibilidad de algún cambio.
Un ejemplo muy usado en las web con estos dos efectos, es el típico botón de leer más,
en el que al pulsar sobre él, muestra el contenido completo del párrafo. Para ello se puede
hacer de varias formas, por ejemplo si cogemos los datos de una base de datos agregamos dos
párrafos, por ejemplo, el primer párrafo con las primeras 50 palabras, o 100 caracteres, y el se-
gundo párrafo que estará oculto con el resto. Centrándonos en la parte de ocultar/mostrar texto
podríamos hacer los siguiente en el fichero HTML:
. . .
<a name="leer_mas"></a>
<p class="encabezadoArticulo">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmo-
dtempor incididunt ut labore et dolore magna aliqua.
<br>
</p>
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br>
. . .
.restoArticulo{
display: none;
. . .
$('.leerMas').click(function(){
//Mis acciones
contador = 0;
$('.restoArticulo').show();
M3. JQUERY
$('.leerMas').hide();
});
$('.leerMenos').click(function(){
//Mis acciones
contador = 0;
$('.restoArticulo').hide();
$('.leerMas').show();
});
. . .
Debemos tener en cuenta que en determinadas ocasiones tendremos que usar efectos
combinados, como por ejemplo en el ejemplo anterior que cuando mostramos el texto, oculta-
mos el botón de leerMas.
4.2. Fundidos.
Hacer fundidos de los elementos con jQuery es posible gracias a los métodos de fading
que disponemos. Este método interacciona sobre los elementos HTML a través del cambio de la
propiedad opacity de CSS.
Recordando que con Opacity podemos variar el fundido con valores entre 0 (totalmente
transparente) y 1 (totalmente opaco). Existen los siguientes métodos para trabajar con los fundi-
dos:
fadeOut() Con este método conseguimos que el elemento que lo recibe desaparezca de la
página a través del cambio de su opacidad, haciendo una transición suavizada
con tendencia al valor de opacity cero.
fadeIn() Con este método conseguimos que el elemento que lo reciba aparezca en la
página a través del cambio de su opacidad, haciendo una transición suavizada
con tendencia al valor de opacity 1. Para poder apreciar este método el
elemento sobre el que estamos trabajando, debe estar con un valor inferior a 1,
es decir, que esté parcial o totalmente transparente.
Aula Mentor
. . .
<button id="desapareceT">FadeOut-Desaparece</button>
<button id="apareceT">FadeIn-Aparece</button>
. . .
460 . . .
$('#desapareceT').click(function(){
$('#miImagen').fadeOut();
});
$('#apareceT').click(function(){
$('#miImagen').fadeIn();
});
var opacidadActual = 1;
$('#aumentaFade').click(function(){
}else{
opacidadActual=(parseFloat(opacidadActual)+parseFloat(incrementoOpacidad)).
toFixed(2);
});
$('#disminuyeFade').click(function(){
opacidadActual=(opacidadActual-incrementoOpacidad).toFixed(2);
});
. . .
Hemos usado parseFloat(número) para indicar a JavaScript que no queremos que conca-
tene los valores número 1 y número 2, ya que si recordamos en JavaScript teníamos el operador
+, y dependiendo del caso debemos asegurarnos que estamos trabajando con números sino
tendremos resultados inesperados. Existen muchos métodos que nos ayudarán para asegurarnos
que estamos trabajando o queremos convertir al tipo que deseemos, entre los más importantes:
eval(), isFinite(), isNaN(), Number(), parseFloat(), parseInt(), String().
También hemos usado el método toFixed(2) que reduce el número de decimales a dos,
porque en este caso no necesitamos más decimales. Es recomendable usar siempre mensajes en
la consola para ayudarnos en la depuración del programa, del tipo console.log("Mensaje : "+va-
riable). Te recomiendo que modifiques la línea del script:
opacidadActual=(parseFloat(opacidadActual)+parseFloat(incrementoOpacidad)).toFixed(2);
Por esta:
opacidadActual=opacidadActual+incrementoOpacidad;
Observa en la consola que es lo que pasa cuando vamos interactuando con los botones. ¿Y si
además quitamos el método toFixed(2)?
4.3. Desplazamientos.
462
Existen unos métodos que van a ayudarnos a crear efectos de desplazamiento sobre
nuestra página, realmente lo que hacen es modificar dinámicamente la altura de un elemento,
normalmente se aplica a una capa/caja de tipo <div></div>.
<div>
</div>
<div id="midesplazamiento"></div>
M3. JQUERY
En el CSS tendríamos:
#midesplazamiento{
height: 100px;
width: 100px;
background-color: #A0A0A0;
$('#desplazamiento').click(function(){
if($("#midesplazamiento").is(":hidden")){ 463
$("#midesplazamiento").slideDown("slow");
}else{
$("#midesplazamiento").slideUp("slow");
});
4.4. Animaciones.
Función de animación: Esta función sirve para indicar cómo se realizará la animación, si
más suave al principio y rápida al final, o igual de rápida todo el
tiempo. Es decir, la velocidad con la que se realizará el cambio de
valores en diferentes puntos dentro de la animación. En principio, los
dos posibles valores son "swing" (por defecto) y "linear".
. . .
<p class="miAnimacion">Este texto será animado cambiando sus propiedades al pulsar el botón</p>
<div>
</div>
. . .
.miAnimacion{
color: blue;
font-size: 12pt;
Debes entender que no todas las propiedades pueden ser animadas, por ejemplo, colo-
res y aquellas que no tengan un valor que pueda ir creciendo o disminuyendo. Con este método
podemos modificar las propiedades de CSS, controlar el tiempo que va a tardar en aparecer la
animación y todo ello de una forma sencilla. En este ejemplo hemos usado solo el tamaño de
fuente, si quieres ver más ejemplos de animación en el siguiente enlace http://api.jquery.com/
animate/.
<p id="colaEfectos">TEXTO</p>
<div>
</div>
. . .
. . .
$('#iniciaCola').click(function(){
micapa.hide(2000);
Aula Mentor
micapa.show(2000);
});
. . .
Y en el CSS, para destacar un poco el texto lo pondremos naranja y un poco más grande
de lo habitual:
.miAnimacion{
color: blue;
font-size: 12pt;
}
466
Ejecuta el código, haz click sobre el botón Inicia Cola de Efectos y verás como realiza
una detrás de otra y de forma ordenada la cola de efectos que le hemos agregado.
El método queue está íntimamente relacionado con la cola de efetos "fx" mencionado en
el apartado anterior. Usando este método podemos ver la lista de eventos encolados, o encolar
incluso otras acciones que no son efectos como tal.
. . .
<p id="colaEfectos">TEXTO</p>
<div>
</div>
<p id="listaEfectos"></p>
. . .
En el script tendríamos:
} 467
$('#iniciaCola').click(function(){
micapa.hide(2000);
notificaListaEfectos(String('hide(2000)'),2);
micapa.show(2000);
notificaListaEfectos(String('show(2000)'),3);
notificaListaEfectos(String('"font-size": "5pt"'),5);
notificaListaEfectos(String('"font-size": "27pt"'),6);
});
Si ejecutamos este código observaremos que por un lado se ejecutan los efectos y por
otro las notificaciones. Esto es porque el navegador agrega los efectos a su cola y los muestra
todos seguidos y sin interacción con el código, ya que hasta que no tiene todos los efectos no
tenemos la cola, por eso hemos agregado un alert("Me han llamado") para detener el código y
realmente ver qué está pasando.
En cada iteracción estoy agregando un valor más a la cola de propiedades del elemento,
y si comentamos esa línea nos dará la sensación de que ha calculado bien el número de efectos
(6) pero no nos va cambiando como esperábamos el texto en la página.
Supongo que estarás pensando en lo siguiente, si por un lado tenemos la cola de efectos
y el navegador ejecuta por otro lado el otro código, si quiero agregar otras funciones que no
sean animaciones como tal, ¿cómo se haría?
Para ello podemos usar el método .queue pero agregándole otros parámetros:
.queue([nombreCola], callback(continua))
Donde nombreCola sería opcional e indica el nombre de la cola donde encolar una
función. Si no se indica nada, se encolará a la cola predeterminada "fx", se encola esa función en
la cola por defecto que gestiona jQuery por nosotros, ejecutando uno detrás de otro los efectos
468 del elemento. Si se indica un nombre, se encolará por nuestra cola y ésta la debemos gestionar
nosotros.
Para ayudarnos en todo el proceso, tenemos el método dequeue(), que puede recibir
un parámetro que es el nombre de la cola que se debe continuar ejecutándose. Si no indicamos
ninguna cola o indicamos el valor "fx", la cola que seguirá procesándose por defecto.
. . .
<h4>Ejemplo 1: </h4><hr>
<p id="colaEfectosQueue">TEXTO</p>
<div>
</div>
. . .
M3. JQUERY
En el CSS:
#colaEfectosQueue {
color: orange;
font-size: 20pt;
Y en el script tendríamos:
. . .
notificaListaEfectosQueue('Inicio', 0);
$('#iniciaColaQueue').click(function(){
//-------------CSS y OTROS-----------------------------
micapaQueue.queue(function(){
$(this).css({
Aula Mentor
});
$(this).dequeue();
});
//-------------ANIMACION-------------------------------
//-------------OTROS-----------------------------
micapaQueue.queue(function(){
notificaListaEfectosQueue('hide(2000)', 2);
$(this).dequeue();
});
470 //-------------ANIMACION-------------------------------
micapaQueue.hide(2000);
//-------------OTROS-----------------------------
micapaQueue.queue(function(){
notificaListaEfectosQueue('show(2000)', 3);
$(this).dequeue();
});
//-------------ANIMACION-------------------------------
micapaQueue.show(2000);
//-------------OTROS-----------------------------
M3. JQUERY
micapaQueue.queue(function(){
$(this).dequeue();
});
//-------------ANIMACION-------------------------------
//-------------OTROS-----------------------------
micapaQueue.queue(function(){
$(this).dequeue();
});
//-------------ANIMACION-------------------------------
//-------------OTROS-----------------------------
micapaQueue.queue(function(){
$(this).dequeue();
});
//-------------ANIMACION-------------------------------
//-------------OTROS----------------------------
micapaQueue.queue(function(){
Aula Mentor
$(this).dequeue();
});
. . .
Cuando estamos realizando una animación con el método .stop() podemos parar la eje-
cución de la misma. Tiene la siguiente sintaxis:
.stop([limpiarCola],[irAlFinal])
Donde el parámetro limpiarCola sirve para eliminar todas las funciones que pudiera ha-
ber en la cola de efectos todavía por ejecutar, ya que si ejecutamos .stop() sin ningún parámetro
detendríamos sólo el efecto actual. Este parámetro es booleano indicando true detendrá toda la
cola, indicando false (u omitiendo el parámetro) detendremos sólo la animación actual.
El siguiente parámetro irAlFinal sirve para que se detenga el efecto de animación ac-
tual, pero que se coloque directamente en el valor final al que tendría ese efecto. Es un pará-
472 metro booleano, si se indica false, indica que la animación se para y se queda donde se había
detenido. Si indicamos true en este parámetro, aunque no se haya terminado el efecto, saltaría
al siguiente efecto, es decir se iría al final de la animación.
Veamos un ejemplo:
. . .
<button id="start">Iniciar</button>
<button id="stop">Parar</button>
<div id="detenerEfectos">jQUERY</div>
. . .
En el CSS tendríamos:
M3. JQUERY
#detenerEfectos{
background:lime;
height:80px;
width:210px;
position:absolute;
$("#start").click(function(){
$("#detenerEfectos").animate({left:'100px'},4500);
$("#detenerEfectos").animate({fontSize:'3em'},4500);
});
473
$("#stop").click(function(){
$("#detenerEfectos").stop();
});
$("#stop2").click(function(){
$("#detenerEfectos").stop(true);
});
$("#stop3").click(function(){
$("#detenerEfectos").stop(true,true);
});
Aula Mentor
5. Resumen.
- Todas las aplicaciones web suelen tener de una u otra forma algún formulario donde el
usuario nos introducirá los datos. jQuery nos proporciona muchos métodos para acceder
a ellos de forma concreta seleccionando qué tipo de campo o tipo de elemento es, y ten-
dríamos: :input, :submit, :text, :password, :radio, :checkbox, :checked, :selected, :disabled,
:enabled, :button, :image, :focus, :file, :reset.
- Para evitar sobrecarga de tráfico entre el servidor y los clientes, es conveniente hacer valida-
ciones de los datos que nos introduce el usuario en el formulario. Además éstas le ayudarán
para indicarles cómo es la forma correcta de rellenar los formularios. Existirían dos formas
de realizar estas validaciones, por nosotros mismos accediendo a los métodos y creando
las reglas pertinentes o de forma externa usando los métodos que nos proporciona jQuery
Validate. Existiendo ya predifinidas la mayoría de las funciones para comprobar datos del
formulario.
- jQuery puede interactuar también con las hojas de estilo CSS, accediendo y modificando las
propiedades definidas en el propio fichero .css. Tendríamos por tanto:
- Podemos emplear el uso de AJAX con jQuery a través de los métodos $.get(), $.post(), $get-
Script() y sobre todo del $.ajax(), pudiendo interactuar al igual que se hacía con JavaScript
pero de una forma más simplificada.
- Una forma de hacer aplicaciones web dinámicas, llamativas y que se diferencien del resto es
el uso de los efectos. Se pueden hacer los siguientes:
• Animaciones: .animate(Propiedades,[v],[Funcióndeanimación],[Callback])
1. jQuery UI.
Con el contenido de las unidades anteriores podemos desarrollar todo tipo de apli-
caciones web, ya que tenemos conocimientos sobre la página web con HTML5, el diseño o
maquetación con CSS3 y podemos interactuar enriquecidamente mediante jQuery. A partir de
esta unidad, vamos a ver otras formas de realizar aplicaciones web o detalles externos a tener
en cuenta en el desarrollo de nuestra aplicaciones.
jQuery fue un proyecto inicial donde se encontraban bibliotecas en JavaScript para fa-
475
cilitar la manipulación del DOM del documento, eventos y simplificar algunas acciones que ya
hacía JavaScript. Este proyecto fue creciendo y fueron añadiendo más bibliotecas, sobre todo
orientadas para que los diseñadores a la hora de implementar componentes de la web tuvieran
su tarea de una forma más sencilla.
Surgió entonces jQuery UI, que es una biblioteca de componentes para el framework
jQuery que le añade un conjunto de plug-ins, widgets y efectos visuales para la creación de
aplicaciones web. Cada componente o módulo se desarrolla de acuerdo a la filosofía de jQuery
(find something, manipulate it: encuentra algo, manipúlalo).
Para usar jQuery UI necesitamos al igual que cuando usábamos jQuery descargar un
archivo, éste contendrá las librerías que vamos a usar. Depende de la aplicación o el documento
en el que estemos trabajando, es posible que no necesitemos todas las librerías, sino sólo parte
de ellas que contendrán los elementos que vamos a usar nosotros.
Para descargarnos las librerias tenemos que irnos a la página de descargas oficial:
http://jqueryui.com/download/
Nos aparecerán una página con unos checkbox donde elegiremos qué opciones son las
que vamos a usar; para descargarnos exclusivamente aquellos componentes que vamos a usar,
en nuestro caso vamos a descargarnos la versión completa y dependiendo de la unidad tendre-
mos aquellas partes para no cargar mucho el documento o página web.
Aula Mentor
En el desarrollo de este manual está la versión jQueryUI 1.11.0, es muy probable que
cuando estés realizando el curso exista otra versión, ya que cada mes o mes y medio salen nue-
vas actualizaciones o mejoras, hay muchos programadores detrás de este proyecto y cada vez
van aportando nuevos códigos. De todas formas, en los recursos del curso hay una carpeta don-
de podrás descargarte todos los archivos que están en relación exacta con el curso y además, lo
más probable es que no tengas muchos problemas para usar la última versión existente, ya que
en muchos casos son totalmente compatibles con otras versiones, por lo que hay que revisar la
documentación.
476
Versión: Cada versión de jQuery UI está preparada para funcionar con una
versión de framework jQuery.
http://jqueryui.com/themeroller/
jquery-ui-1.11.0.custom.zip
Y si hemos elegido todas las opciones posibles habremos observado que tiene un tama-
ño de casi 2MB, por lo que es un tamaño grande y no recomendable en la mayoría de los casos.
Sería necesario ver qué apartados realmente vamos a necesitar y sino vamos a insertar algún
componente no seleccionarlo ya que sólo ralentizaremos la web en dispositivos con menos re-
cursos.
En esta versión parece que la tendencia según las últimas versiones es descargar los ar-
chivos css, js, quedando una estructura como ésta:
Tenemos que tener en cuenta que esta descarga nos proporciona todo lo necesario para
funcionar independientemente, de ahí que trae todo, incluso el archivo jQuery para funcionar. 477
external: Carpeta donde tendremos fichero externos al jQueryUI, en este caso el fichero
jQuery JavaScript Library v1.10.2
images: Carpeta donde se alojarán las imágenes necesarias del tema descargado, fondos
e iconos.
Luego tendremos dos archivos que son realmente los que vamos a necesitar para poder
usar jQueryUI con este tema, como ya estamos acostumbrados en el framework de jquery, siem-
pre nos proporcionarán la versión mínima (nombre-archivo.min.extensión) para usarla cuando
esté en fase de producción.
Recordemos que usualmente mientras estamos creando nuestra aplicación web, estamos
en fase de desarrollo y es posible que necesitemos ver el código fuente original, ver cómo está
implementado y la documentación al respecto. Cuando ya hemos probado la web y queremos
lanzarla a Internet o a nuestra Intranet de empresa, tendríamos que pasarla a fase de produc-
ción, donde se optimiza el archivo eliminando comentarios, tabuladores y saltos de líneas inne-
cesarios ya que el navegador no los utiliza.
Aula Mentor
<script src="jquery-ui.js"></script>
<script src="jquery.js"></script>
Por ello vamos a partir de nuestra estructura de directorios que hemos estado usando
todo el curso:
Vamos a tener todas las carpetas vacías menos la carpeta js donde vamos a mantener
el archivo jquery-1.11.1.min.js y jquery-1.11.1.js. Tenemos que asegurarnos muy bien donde
tenemos los archivos CSS y los JS, ya que la mayoría de las veces, el error está en nuestro script
y es por no haber llamado correctamente el nombre o ruta del archivo.
1.2. Acordeón.
478
Un efecto que ya hemos usado anteriormente de forma manual pero que el plugins de
jQueryUI nos trae de una forma muy llamativa es el efecto acordeón, donde conforme se va ha-
ciendo click en el componente va desplegándose y cerrándose con sus correspodientes efectos:
Para ello tendríamos que tener la estructura anterior descrita (con los correspondientes
archivos css y js) y el siguiente contenido en nuestro archivo HTML5, por ser la primera vez voy
a agregar todo el código completo, aunque también puedes verlo en los recursos del curso.
<!DOCTYPE html>
<html lang="es">
<head>
M3. JQUERY
<title>Módulo jQueryUI</title>
<!-- Fichero que se refiere a jQuery UI para poder usar sus diseños -->
<!-- Añadimos la hoja de estilo de jQuery UI para poder usar sus diseños-->
479
</head>
<body>
<section>
<article>
<div id="miAcordeon">
Aula Mentor
<h3>Elemento 1</h3>
<h3>Elemento 2</h3>
<h3>Elemento 3</h3>
<h3>Elemento 4</h3>
</div>
</article>
480 </section>
</body>
</html>
Lo único que hemos tenido que declarar es una capa de tipo miAcordeon para poder
seleccionarla/buscarla en mi script jQuery (como hemos estado realizando todo el curso) y a
continuación tenemos que usar el método:
.accordion();
$(document).ready(function(){
$( "#miAcordeon" ).accordion();
Ten en cuenta que no hemos declarado ningún archivo propio CSS ya que estamos
usando los que usa por defecto el plugins. Además si nos fijamos, este efecto está usando va-
rios elementos (efectos, propiedades y estilos) que, aunque ya sabemos nosotros crearlos desde
cero, nos facilitan mucho ya que estaría todo creado previamente.
M3. JQUERY
Cuando el foco está en el header del elemento podemos usar los siguientes elementos:
ESPACIO/ENTER: Activa el panel asociado al elemento cabecera que está en ese momento.
Al fin y al cabo, no dejan de ser unos archivos con hojas de estilo predefinidas, el widget
acordeon de jQuery UI CSS especifica unas reglas concretas, pero si necesitas saber a que estilos
se está refiriendo siempre los puedes ver en la documentación oficial, en este caso verás que
puedes usar:
481
ui-accordion: El contenedor del acordeón.
UI Core Núcleo de UI
Existen muchos parámetros y funciones que puedes modificar y configurar, en caso que
necesites más información puedes recurrir a la documentación oficial:
http://api.jqueryui.com/accordion/
Aula Mentor
1.3. Autocompletar.
Uno de los efectos y elementos que es muy interesante para el usuario es ayudarle en
la escritura y simplificación en la elección de los elementos. Para ello, jQuery UI nos facilita un
elemento que se llama autocomplete, en el que conforme va escribiendo el usuario, van saliendo
las opciones más similares a su búsqueda.
.autocomplete()
A este método se le ha de pasar al menos una lista de nombres, para ello usamos la sin-
taxis:
$(miSeleccion ).autocomplete({
source: Lista
});
Jesús, José , Antonio, Andrés, Luis, Mario, Miguel Ángel, Francisco, Juan, Javier, María, Guada-
lupe, Raquel, Rosa, Alicia, Dolores.
482
Queremos que cuando el usuario empiece a escribir su nombre, si éste está en la lista le
vaya ayudando en la decisión agilizando todo el proceso.
. . .
<div>
</div>
. . .
$(document).ready(function(){
var listaNombres = [
"Jesús",
"José" ,
"Antonio",
"Andrés",
"Luis",
"Mario",
"Francisco",
"Juan",
"Javier",
"María",
"Guadalupe",
"Raquel",
"Rosa",
"Alicia",
"Dolores"
];
$( "#miAutocomplete" ).autocomplete({
source: listaNombres
Aula Mentor
});
Debemos pensar que estos nombres en algunos casos serán siempre los mismos, por
ejemplo si estamos en un formulario donde preguntamos al usuario sobre la provincia donde
nació, estás son estáticas y siempre serán las mismas y podíamos usarlo de esta forma. Pero en
otros casos esta lista será dinámica, cogida de una Base de Datos, de otra web o servidor. Para
facilitar los posibles cambios es una buena práctica cargar la lista de nombres o bien con una
variable independiente, o con una función. Al realizarlo así, tenemos algo parecido a esto:
$( "#miAutocomplete" ).autocomplete({
source: dameNombres()
});
Así estamos llamando a una función que se llama dameNombres() y realmente nos daría
igual de que forma obtenemos los nombres, hoy puede ser de forma estática y en un futuro,
podemos usar otros métodos, pero si hemos trabajado así, el mantenimiento del código será
siempre más sencillo:
var listaNombres = [
"Jesús",
"José" ,
"Antonio",
"Andrés",
"Luis",
"Mario",
"Miguel Ángel",
"Francisco",
"Juan",
"Javier",
M3. JQUERY
"María",
"Guadalupe",
"Raquel",
"Rosa",
"Alicia",
"Dolores"
];
return listaNombres;
Existen muchos parámetros y funciones que puedes modificar y configurar, en caso que necesi- 485
tes más información puedes recurrir a la documentación oficial:
http://api.jqueryui.com/autocomplete/
1.4. Botones.
Otro elemento que no puede faltar en cualquier aplicación web son botones, y claro
está, jQueryUI nos facilita también varias formas de declararlos. Para ello tenemos el método
para crear, o dar formato de botones siguiente:
.button()
. . .
. . .
Y en el jQuery tendríamos que seleccionar nuestros elementos y decirle a todos ellos que
les aplique el método .button() de jQueryUI.
$(document).ready(function(){
$( "input[type=submit], a, button" )
.button()
//Eliminamos la acción por defecto del evento .click para este ejemplo.
event.preventDefault();
});
Aunque podemos pensar que este método no es nada útil, ya que hemos visto muchas
formas en el curso de crear botones, sólo con apenas tres líneas hemos creado los botones con
ese estilo, que de hacerlo de forma manual tendríamos que definir: un fondo concreto, una
fuente de texto y color agradable y en sintonía con los demás, además de tener que controlar
todos los eventos cuando pase por encima de cada botón, crear nuevos fondos, color de borde,
color de texto, etc. Realmente estamos totalmente capacitados para realizar un botón con una
apariencia igual o mejor que ésta, lo único que jQueryUI nos ofrece muchos temas, colores y
demás estilos predefinidos, y en muchas situaciones cuando tengamos que desarrollar una apli-
cación de forma rápida.
Existen muchos parámetros y funciones que puedes modificar y configurar, en caso que
necesites más información puedes recurrir a la documentación oficial:
M3. JQUERY
http://api.jqueryui.com/button/
1.5. Calendario.
Muchas veces cuando estamos realizando un formulario, necesitamos que el usuario nos
introduzca una fecha, por ejemplo, la fecha de nacimiento, la fecha de una cita, etc; en definitva
un campo en el que el usuario necesita introducir un dato de tipo fecha y tenemos que asegu-
rarnos que el formato de fecha es correcto y sea una forma agradable y fácil para él.
.datepicker()
Con él nos ahorraremos mucho tiempo de programación ya que nos da todo realizado,
los días de cada mes, y una forma de ir interactuando entre ellos (pasar de mes). Como ya sa-
bemos existen muchos temas, y cada tema tiene su estilo correspondiente y todos los elementos
estarían en concordancia con los demás componentes, por eso, lo ideal es escoger un tema
apropiado o crearnos uno por nuestra cuenta, como veremos en temas posteriores.
487
Ejemplos de calendarios en los diferentes temas:
Para usar el calendario, no tenemos que usar mucho código, debemos asociarlo a un
campo del formulario en el HTML y posteriormente llamar al calendario desde jQuery UI. En el
documento HTML tendríamos que crearnos un campo de tipo texto y asociarle un id para poder
llamarlo desde el script de jQuery:
. . .
. . .
Aula Mentor
$(document).ready(function(){
$( "#miCalendario" ).datepicker();
Y realmente con apenas dos líneas de código, hemos creado un calendario muy vistoso
y útil. Cuando pulsemos en la fecha, directamente nos parecerá la fecha en formato MM/DD/
AAAA:
488
Existen muchos parámetros y funciones que puedes modificar y configurar, en caso que
necesites más información puedes recurrir a la documentación oficial:
http://api.jqueryui.com/datepicker/
1.6. Diálogos.
Cuando necesitemos usar diálogos, podemos recurrir también a jQueryUI, así mostramos
diálogos más personalizados a los que tiene por defecto el navegador. Es muy interesante para
aquellos casos que queramos dar más personalización a nuestra página y destacar sobre otras,
ya que son diferentes y más agradables.
Para usar los diálogos con jQueryUI tenemos que usar el método:
.dialog()
. . .
<p>Este texto será el que aparecerá en el diálogo. Esta ventana la puede mover o cerrar el usuario.</
p>
M3. JQUERY
</div>
. . .
$(document).ready(function(){
$( "#miDialogo" ).dialog();
El resultado sería un diálogo en sintonía con la página, todo esto por usar el mismo tema
de diseño:
http://api.jqueryui.com/dialog/
489
1.7. Menús.
Toda aplicación o página web debe tener un menú o forma de interactuar entre las
diferentes secciones de la página. En el módulo de CSS3 vimos muchos métodos y menús dife-
rentes, sabemos cómo se hacen y en qué están basados la mayoría. Para ayudarnos en esta tarea
tan común, jQueryUI también nos proporciona una forma de crear nuestros menús, y de igual
forma, se suele usar listas para crear los nombres de los menús, hoy en día es casi impensable
usar imágenes; se hace más hincapié en el CSS3 y así se agiliza la página.
Para usar el método menú de jQueryUI, sólo tenemos que usar el siguiente método:
.menu()
Vamos a coger literalmente el texto del ejemplo del ejercicio 6.2.2 para demostrar que si
realizamos una buena semántica en el documento HTML, poder hacer cambios posteriormente
es muy sencillo. El código HTML que teníamos para el menú lo hicimos con lista y tenía la si-
guiente estructura:
<ul id="menu">
<li>INICIO</li>
<li>Sección 1
<ul class="submenu">
Aula Mentor
<li>Elemento 1</li>
<li>Elemento 2</li>
<li>Elemento 3</li>
<li>Elemento 4</li>
</ul>
</li>
<li>Sección 2
<ul class="submenu">
<li>Elemento 1</li>
<li>Elemento 2</li>
<li>Elemento 3</li>
<li>Elemento 4</li>
490 </ul>
</li>
<li>Seccion 3
<ul class="submenu">
<li>Elemento 1</li>
<li>Elemento 2</li>
<li>Elemento 3</li>
<li>Elemento 4</li>
</ul>
</li>
M3. JQUERY
<li>Seccion 4
<ul class="submenu">
<li>Elemento 1</li>
<li>Elemento 2</li>
<li>Elemento 3</li>
<li>Elemento 4</li>
</ul>
</li>
</ul>
Y en el CSS sólo necesitamos delimitar el ancho del menú, ya bien dentro del fichero CSS
o si lo hacemos dentro del head:
<style>
$(document).ready(function(){
$( "#menu" ).menu();
Nuevamente con muy pocas líneas hemos realizado un menú desplegable y además,
tenemos muchos temas para poder usarlos. El ejemplo, quedaría de la siguiente forma, debes
fijarte que ha contado muchas opciones y cambios de colores, bordes, sombreado, etc que ten-
dríamos que hacer con CSS nosotros mismos:
Existen muchos parámetros y funciones que puedes modificar y configurar, en caso que
necesites más información puedes recurrir a la documentación oficial:
http://api.jqueryui.com/menu/
Cuando estamos usando una barra de progreso, jQuery UI nos ofrece una forma muy
sencilla y con muy buen aspecto gráfico. Para ello, podemos usar la sintaxis siguiente:
.progressbar({
value: 00
});
Donde value nos indica el valor en el que estaría la barra de progreso en ese momento,
siendo 0 el menor y 100 el mayor o la barra completa. Para usarlo, sólo debemos de agregar al
documento HTML el siguiente código:
. . .
</div>
. . .
En el jQuery tendríamos:
$(document).ready(function(){
$( "#miBarraProgreso" ).progressbar({
value: 56
});
Veamos un ejemplo que sea más automático, es decir que veamos como va aumentando
la barra de progreso según unos parámetros, estos parámetros, ahora van a ser simulados, pero
ayudarán a entender mejor este método:
. . .
<div id="miBarraProgreso2">
</div>
</div>
. . .
Y este al jQuery:
miProgressbar.progressbar({
value: false,
change: function() {
},
complete: function() {
});
function progreso() {
if ( val < 99 ) {
Lo que va realizando este código es hacer aumentar automáticamente el valor con (val
+2) y vamos a su vez insertando temporizaciones, tanto para iniciar el script como para los in-
tervalos en cada cuenta.
Hemos usado dos parámetros de la función, change para la acción que vayamos hacer
mientras haya un cambio, en este caso mostrar el valor del %. Y otra función cuando termine,
complete, que en este caso, muestra un texto "¡Simulación completa!"
494 También debemos prestar atención a un método que hemos usado que es:
Con esta función lo que hacemos es simular tiempos de espera, ya que se ejecutará la
función indicada en el primer parámetro, pasado el tiempo expresado en milisegundos del se-
gundo parámetro.
setTimeout( progreso, 80 );
Indicando que ejecute la función progreso en 0.12 segundos, creando el efecto de carga
simulada de un archivo, de una web, etc.
Todo este ejemplo viene descrito por una simulación, y de paso hemos aprovechado
para aprender la función setTimeout, pero en una aplicación real tendremos que calcular ese
tiempo con datos reales, por ejemplo en la subida de un archivo, si éste ocupa 10.000MB, y
lleva 1.000MB tendrá un 10% subido y en cada actualización podemos incluso indicar cuántos
MegaBytes se han subido.
M3. JQUERY
Puedes ver el ejercicio comentado en los recursos del curso, recuerda que sería impor-
tante que intentaras crearlos tú desde cero para coger una soltura real con todos los módulos
que estamos trabajando:
http://api.jqueryui.com/progressbar/
.selectmenu();
Vamos a ver un ejemplo con varios ejemplo de menus, uno simple, otro con varios gru-
pos, y otro con muchos elementos para ver cómo los presenta el plugins.
select {
width: 200px;
Y en el script de jQuery:
$(document).ready(function(){
$( "#idioma" ).selectmenu();
Aula Mentor
$( "#nivelIdioma" ).selectmenu();
$( "#edad" )
.selectmenu()
.selectmenu( "menuWidget" );
Hemos usado la opción menuWidget del la opción .selectmenu() existen muchas opcio-
nes donde puedes ir probando y practicando, para ello, siempre disponemos de la documenta-
ción oficial con todos sus parámetros.
http://api.jqueryui.com/selectmenu/
1.10. Slider.
.slider()
Para poder usarlo en nuestras aplicaciones web, tenemos que usar muy poco código,
veamos un ejemplo sencillo. En el HTML tendríamos que tener:
<div id="miSlider"></div>
$(document).ready(function(){
$("#miSlider").slider();
Con este ejemplo hemos creado un slider, podemos mover y desplazarlo a la derecha
o izquierda, pero realmente, no nos sería muy práctico en nuestros formularios. Uno entre los
tantos ejemplos que podemos usar, sería que ese desplazamiento estuviera relacionado con las
opciones de un componente <select></select>:
<form id="formulario">
<option>1</option>
<option>2</option>
<option>3</option>
497
<option>4</option>
<option>5</option>
<option>6</option>
</select>
</form>
min: 1,
max: 6,
range: "min",
});
$( "#misHabitaciones" ).change(function() {
});
Con este script vamos actualizando el valor del <select> cada vez que hay algún cambio
(change). Vamos modificando el valor del select dentro de sus valores, que pueden ser numéri-
cos o alfanuméricos:
Existen muchas formas interesantes resueltas sobre los slider, simulando ecualizadores,
mezcladores de colores y todos los que se te ocurran. Te recomiendo que una vez entendidos
estos ejemplos, si tienes tiempo puedas ampliar información sobre ellos en la documentación
oficial http://api.jqueryui.com/slider/ y verás cómo agregar efectos y elementos de una forma
sencilla.
498
1.11. Spinner.
Cuando tengamos que usar valores numéricos, otro componente muy utilizado es el uso
de spinner, teniendo la opción de aumentar y disminuir el valor del campo para poder rescatar-
lo.
Para hacerlo más didáctico vamos a insertar varios botones para poder ver cómo interac-
túa el componente con el usuario:
M3. JQUERY
<p>
</p>
<p>
</p>
<p>
499
</p>
$(document).ready(function(){
/*-------------------------------------------------
-------------------------------------------------*/
$( "#desactiva" ).click(function() {
Aula Mentor
miSpinner.spinner( "enable" );
} else {
miSpinner.spinner( "disable" );
});
/*-------------------------------------------------
-------------------------------------------------*/
if ( miSpinner.spinner( "instance" ) ) {
miSpinner.spinner( "destroy" );
} else {
miSpinner.spinner();
});
/*-------------------------------------------------
-------------------------------------------------*/
$( "#dameValor" ).click(function() {
});
/*-------------------------------------------------
el valor 5 en el spinner
-------------------------------------------------*/
$( "#insertaValor" ).click(function() {
miSpinner.spinner( "value", 5 );
});
501
/*-------------------------------------------------
-------------------------------------------------*/
$( "button" ).button();
1.12. Tabs.
Una forma de organizar las páginas web y mostrar al usuario diferentes opciones son las
tabs o pestañas también llamadas tab-bar. Seguro que las has visto sobre todo en aplicaciones
para Smartphone u otros dispositivos. Para crear unas pestañas debemos usar el método:
Aula Mentor
.tabs()
. . .
<div id="misTabs">
<ul>
502
</ul>
<div id="tabs-1">
</div>
<div id="tabs-2">
</div>
<div id="tabs-3">
</div>
</div>
. . .
M3. JQUERY
Si nos fijamos tendríamos tres partes bien diferenciadas; el contenedor que contendrá
todo el conjunto (div id="misTabs"), otra donde tenemos las opciones superiores de las pestañas
que declaramos como una lista <ul> <li>…</li></ul> y otra donde declaramos el contenido
interior de cada pestaña <div id="tabs-n">.
Ahora en el script jQuery sólo tenemos que definir las siguientes líneas:
$(document).ready(function(){
$( "#misTabs" ).tabs();
1.13. Tooltip.
Por último vamos a ver los elementos tooltip, indispensable para ayudar al usuario cuan-
do está navegando por nuestra web o rellenando nuestros formularios. Este tipo de ayuda se
presenta normalmente al pasar el ratón por encima, al coger el elemento o el foco. Esta infor-
mación puede ser texto o incluir más cosas, imágenes u otros componentes, para ello existe el
método:
503
.tooltip()
puede estar unido a cualquier elemento. Al pasar el ratón por el elemento, el atributo title se muestra
en una pequeña caja al lado del elemento</p>
<p>
</p>
<label for="dni">DNI:</label>
Aula Mentor
<input id="dni" title="Introduce tu dni con la letra seguida (sin caracteres ni espacios) y en mayús-
cula"></p>
</div>
$(document).ready(function(){
$(this).tooltip();
Como podemos darnos cuenta, directamente todo lo que pongamos como title será
detectado por el método y le agregará la información. En este caso y como queremos que se
aplique a todo el documento hemos dicho que todo el $(document) cuando sea leído, use el
elemento con él mismo (this). Se podría haber realizado una selección más exahustiva, pero para
el ejemplo viene bien ya que deseamos que se active para todos los componentes susceptibles
de tener tooltip.
504
http://plugins.jquery.com
http://jquery-plugins.net
Podemos por tanto, desarrollar nuestros propios plugins, para que terceras personas
aprovechen el código desarrollado. Existen varias formas de realizar plugins, algunas simple-
mente ponen disponibles nuevas funciones globales a nuestro jQuery.
Las funciones globales son en realidad métodos del objeto jQuery, pero en un sentido
práctico, son funciones dentro de un espacio de nombres jQuery. Un ejemplo de ello sería la
función $.ajax(), en ella todo lo que $.ajax() realiza se podría conseguir con una función global
denominada $.ajax(), pero este enfoque nos dejaría abiertos a conflictos de nombres de función.
Al situar la función dentro del espacio de nombre jQuery, solamente nos tenemos que preocupar
por conflictos con otros métodos jQuery.
Para añadir una nueva función al espacio de nombre jQuery, podemos simplemente
asignar la nueva función como una propiedad del objeto jQuery:
jQuery.globalFunction = function(){
//Mi código
jQuery.globalFunction();
$.globalFunction();
Así podríamos usar nuestra llamada a la función de forma básica y en este ejemplo mos-
trará por consola el texto indicado.
jQuery.functionOne = function(){
jQuery.functionTwo = function(){
}
Aula Mentor
jQuery.functionThree = function(miVariable){
$.functionOne();
$.functionTwo();
$.functionThree('Hola');
Se puede utilizar otra sintaxis para definir nuestras funciones, que es usar $.extend(),
pero tenemos que tener cuidado al utilizar el mismo espacio de nombres de jQuery, podríamos
tener conflictos con nombres de función definidos en otros plugins jQuery.
jQuery.extend({
jQuery.functionOne : function(){
506 },
jQuery.functionTwo : function(){
},
jQuery.functionThree : function(miVariable){
});
Para evitar conflictos muchas veces es mejor encapsular todas las funciones globales
para un plugin concreto en un objeto de la siguiente forma:
jQuery.miPlugin = {
jQuery.functionOne : function(){
};
jQuery.functionTwo : function(){
};
jQuery.functionThree : function(miVariable){
};
};
Esta forma de trabajar crea realmente otro espacio de nombres para nuestras funciones
globales, denominado jQuery.miPlugin. Ahora las funciones que hay declaradas, realmente
serían métodos del objeto jQuery.miPlugin, una propiedad del objeto global jQuery. Por tanto
para poder usar estas funciones debemos anteponer el nombre miPlugin antes de llamar a los
otros métodos así no tendrá conflictos.
$.miPlugin.functionOne();
$.miPlugin.functionTwo(); 507
$.miPlugin.functionThree('Hola');
Así evitamos colisiones con otros espacios de nombres y plugins, es la forma de asegu-
rarnos de estar totalmente protegidos ante errores externos a nuestro pluging.
La mayoría de la funcionalidad de jQuery viene a través del uso de sus métodos de ob-
jeto, y aquí es donde los plugins también destacan. Siempre que escribimos una función que
actúa sobre parte del DOM, es apropidado crear un método "." de objeto.
jQuery.fn.miMetodo = function(){
//Mi código
console.log('Soy un método');
$(miSeleccion).miMetodo();
Nuestro método se invocará sobre el elemento de selección que haya declarado, po-
dríamos haber declarado una función global, sin embargo, puesto que no hemos utilizado los
nodos DOM coincidentes en ningún sentido. Una implementación de método razonable actuará
siempre sobre su contexto.
Una vez hemos realizado todo nuestro código, creando funciones, métodos, etc pode-
mos publicarlo de modo que otros puedan utilizarlo y benificiarse de él, como tú, en otras oca-
siones te has podido benificiar de otros códigos, puedes hacer esto en el repositorio de plugins
oficial de jQuery http://plugins.jquery.com. Aquí debemos registrarnos, seguir las instrucciones
para describir el plugin y subir el archivo con el código comprimido en .zip.
Por supuesto antes de subir ningún plugins debemos asegurarnos que el plugin está co-
rrecto para el público, existen una reglas a seguir cuando se escriben plugins para que funcione
bien con otros códigos:
Los plugins jQuery pueden no asumir que el alias $ se encuentra disponible, en su lugar
debe escribir el nombre jQuery completo cada vez, que en el caso de usar script muy extenso
puede ocasionar lentitud y dificultar la lectura.
508
Interfaces del método
Todos los métodos jQuery se invocan dentro del contexto de un objeto jQuery, de modo
que this, hace referencia a un objeto que puede hacer referencia a uno o más elementos DOM.
Todos los métodos deben comportarse correctamente con independencia del número de ele-
mento coincidentes.
Estilo de documentación
/**
*@alias
*@author
*@classDescription
*@constructor
*@deprecated
M3. JQUERY
*@example
*@exception
*@id
*@inherits
*@internal
*@memberOf
*@method
*@namespace
*@param
*@private
*@projectDescription
*@property
*@return 509
*@see
*@since
*@type
*@version
**/
Por supuesto no es obligatorio rellenar todos para cada función, hay que pensar que la
documentación está pensada para facilitar y ayudar a otras personas que no han desarrollado el
código a que puedan usarlo y entenderlo correctamente.
Usualmente en la definición del fichero se agregan los datos de versión, autor, copyrigth
y otros, para saber de forma global qué va a contener el fichero. Por ejemplo, si abrimos un
archivo de jquery, veremos que inicialmente nos dá información, en concreto para la versión
jquery-1.11.1.js nos da la siguiente información:
/*!
* http://jquery.com/
Aula Mentor
* Includes Sizzle.js
* http://sizzlejs.com/
* http://jquery.org/license
* Date: 2014-05-01T17:42Z
*/
Existen programas y proyectos que se han ocupado que posteriormente toda esa docu-
mentación podamos verla de una forma más agradable y vistosa, para Java, C++ existe Doxigen
y para JavaScript hay un proyecto nuevo llamado JSDuck.
510
3. Resumen.
- jQuery UI, es una biblioteca de componentes para el framework jQuery que le añade un
conjunto de plug-ins, widgets y efectos visuales para la creación de aplicaciones web. Cada
componente o módulo se desarrolla de acuerdo a la filosofía de jQuery (find something,
manipulate it: encuentra algo, manipúlalo).
- Para la instalación de jQuery UI, nos tendremos que descargar unos archivos dependiendo
de la versión de jQuery que estemos trabajando. Una vez descargados agregamos sus temas,
funciones y podremos utilizar muchos elementos de forma automática:
Acordeón: .accordion()
Autocomplete: .autocomplete()
Botón: .button()
Calendario: .datepicker()
Diálogos: .dialog()
Menús: .menu()
Spinner: .spinner()
Tabs: .tabs()
Tooltip: .tooltip()
- Podemos desarrollar nuestros propios plugins para que otros desarrolladores web puedan
utilizar nuestro código. Éste lo tenemos que hacer siguiendo unas reglas para no interceder
con otros métodos de jQuery, si no podríamos crear conflictos entre el propio código y no
funcionaría. Para ello, tenemos varias opciones:
511