jQuery Blues: 5.Eventos básicos

Tutorial de jQuery 5. En esta entrada aprenderemos los eventos básicos de jQuery.

klimt

archivado en: JavaScript / 30 octubre, 2012 / taller:

Eventos básicos

Seguimos con el tutorial de jQuery. Hoy vamos a aprender cómo funcionan los eventos, es decir, las acciones que se desencadenan cuando los usuarios hacen algo, como pulsar un botón o pasar el cursor por alguna zona.

Ya hemos visto un poco el mecanismo básico en unidades anteriores. Se asocian como métodos a un selector y, en una función, se indican las acciones que deben ocurrir con ese evento.

  • jQuery ("selector").evento (
  • function () {
  • sentencias
  • }
  • );
Hay otra sintaxis más compleja, pero de momento basta con saber otros dos detalles. Primero, que el código anterior se puede escribir en menos líneas, lo cual es más cómodo una vez que te acostumbras a las funciones dentro de los eventos. Así:
  • jQuery("selector").evento (function () {
  • sentencias
  • });

Y el segundo es que, cuando lo que sucede en el evento afecta al mismo selector que lo desencadena se puede utilizar la palabra reservada this, que viene a significar «este mismo». Por ejemplo, para cambiar el color de un párrafo cuando es pulsado, podríamos escribir:

  • jQuery("p").click (function () {
  • jQuery(this).css ("color", "#900");
  • });

Y ahora ya sí vamos con los eventos básicos.

Eventos básicos con el ratón

Los dos eventos fundamentales, cuya sintaxis se debe aprender de memoria, son:

1) .click()

La acción se desencadena (trigger) cuando se pulsa (y suelta) un elemento.

  • jQuery("p").click(function () {
  • jQuery(this).css ("color", "#900");
  • });

2) .hover

Este es muy útil para cualquier acción relacionada con los rollovers, es decir, con cosas que pasan al pasar el cursor por un elemento. Lleva dos funciones separadas por comas, en la primero se define lo que debe suceder cuando se sitúe el cursor sobre un elemento y en la segundo la que debe pasar cuando lo abandone. Por ejemplo, este script colorearía un párrafo de rojo al pasar sobre el elemento y luego de verde al abandonarlo.

  • jQuery("p").hover(
  • function () {
  • jQuery(this).css ("color", "#900");
  • },
  • function () {
  • jQuery(this).css ("color", "#090");
  • }
  • );

Además, hay otros eventos básicos que se suelen emplear menos:

3) .dblclick

Cuando se pulsa dos veces con el ratón.

  • jQuery("p").dblclick(function () {
  • jQuery(this).css ("color", "#900");
  • });

 4) .mouseenter.mouseout

Equivalen a .hover. Con .mouseenter ocurre la acción al entrar el cursor en un elemento y con .mouseout al salir.

  • jQuery("p").mouseenter(function () {
  • jQuery(this).css ("color", "#900");
  • });
  • jQuery("p").mouseout(function () {
  • jQuery(this).css ("color", "#900");
  • });

5) .mouseup / .mousedown

Son muy parecidos a .click. Con .mousedown la acción se desencadena al pulsar el ratón y con .mousedown al dejar de pulsar.

  • jQuery("p").mouseup(function () {
  • jQuery(this).css ("color", "#900");
  • });
  • jQuery("p").mousedown(function () {
  • jQuery(this).css ("color", "#900");
  • });

6. .mouseleave

Cuando el cursor abandona un elemento. Es muy parecido a .mouseout, pero se actúa de forma diferente si afecta a un nodo hijo. Es un matiz sobre el que ahora no vale la pena profundizar, pero si alguien está interesado puede consultar el artículo de mkyong Different Between Mouseout() And Mouseleave() In JQuery.

7. .toggle

Este evento está «deprecated», es decir, eliminado de la última versión de jQuery, por lo que me limito a enunciarlo por si alguna vez lo veis en algún script o plugin. Servía para desencadenar un evento en función de si se había pulsado ya un elemento.

Eventos básicos con el teclado

 1. keypress

Cuando el usuario pulsa alguna tecla. Por ejemplo, con este código se cambiaría el párrafo cuando el usuario comenzase a escribir en el campo del formulario.

  • ...
  • jQuery(document).ready(function($) {
  • jQuery("#formulario").keypress(function () {
  • jQuery("#nombre").css("color", "#900");
  • });
  • ...
  • <form>
  • <input type="text" id="formulario">
  • <p id="nombre"> Escriba su nombre </p>
  • </form>
  • ...

2. Keydown / Keyup

Lo mismo que en el caso anterior, pero al ser pulsada o levantada la tecla.

  • jQuery("#formulario").keydown(function () {
  • jQuery("#nombre").css("color", "#900");
  • });
  • jQuery("#formulario").keyup(function () {
  • jQuery("#nombre").css("color", "#900");
  • });

Eventos con el teclado o el ratón

Estos eventos, sobre todo, se usan para trabajar con formularios, un tema que veremos en profundidad más adelante, y se desencadenan cuando se sitúa el «foco» sobre un elemento, como ocurre con los campos de un formulario cuando se sitúa el curso sobre ellos para escribir.

1) .focus

Cuando se sitúa el foco

  • jQuery("#formulario").focus(function () {
  • jQuery("#nombre").css("color", "#900");
  • });

2) .blur
Cuando se pierde el foco (muy útil para chequear que se han escrito los datos de forma correcta)

  • jQuery("#formulario").blur(function () {
  • jQuery("#nombre").css("color", "#900");
  • });

3) .focusin / .focusout

Similares a los anteriores, pero afectan también a los nodos hijo.

Caso práctico

En la próxima entrada veremos más eventos, pero ahora vamos a poner en práctica lo aprendido con el siguiente ejercicio. ¿Cómo se podría hacer un menú desplegable con lo que ya sabemos? Es decir, un menú que al pasar el cursor se desplegaran las respectivas subopciones.

[singlepic id=17 w=406 h=142 float=center]

La respuesta es sencilla si recordamos la propiedad display de las CSS, que  puede adquirir entre otros valores:

  • block: para que un elemento sea visible (se comporte como un bloque)
  • none: para esconder un elemento (para que no se muestre)

Tratamos de pensarlo y luego miramos la solución.

Solución

Una forma entre varias de hacerlo:

1). Primero se hacen tres bloques flotados a la izquierda, cada uno de los cuales incluye una lista desordenada a la que se le quitan todos los estilos (el margen, los cuadratines, etcétera)

  • <!DOCTYPE html>
  • <html>
  • <head>
  • <title>caso práctico</title>
  • <style type="text/css">
  • #menu {
  • overflow: hidden;
  • }
  • #menu ul{
  • float: left;
  • list-style-type:none;
  • list-style-type:none;
  • padding:0em;
  • width:8em;
  • }
  • #bloque_1 {
  • border-right: 1px solid #900;
  • border-left: 1px solid #f33;
  • background-color:#c00;
  • font-weight:bold;
  • color:#fff;
  • }
  • #bloque_1 li {
  • border-top: 1px solid #f33;
  • border-bottom: 1px solid #900;
  • padding:0.3em;
  • }
  • #bloque_2 {
  • border-right: 1px solid #630;
  • border-left: 1px solid #f90;
  • background-color:#c60;
  • font-weight:bold;
  • color:#fff;
  • }
  • #bloque_2 li {
  • border-top: 1px solid #f90;
  • border-bottom: 1px solid #630;
  • padding:0.3em;
  • }
  • #bloque_3 {
  • border-right: 1px solid #390;
  • border-left: 1px solid #9f6;
  • background-color:#6c0;
  • font-weight:bold;
  • color:#fff;
  • }
  • #bloque_3 li {
  • border-top: 1px solid #9f6;
  • border-bottom: 1px solid #390;
  • padding:0.3em;
  • }
  • </style>
  • </head>
  • <body>
  • <nav id="menu">
  • <ul id="bloque_1">
  • <li>Opción 1</li>
  • <li>Subopción 1.1</li>
  • <li>Subopción 1.2</li>
  • <li>Subopción 1.3</li>
  • </ul>
  • <ul id="bloque_2">
  • <li>Opción 2</li>
  • <li>Subopción 2.1</li>
  • <li>Subopción 2.2</li>
  • <li>Subopción 2.3</li>
  • </ul>
  • <ul id="bloque_3">
  • <li>Opción 3</li>
  • <li>Subopción 3.1</li>
  • <li>Subopción 3.2</li>
  • <li>Subopción 3.3</li>
  • </ul>
  • </nav>
  • </body>
  • </html>

Debería quedar algo similar a esta imagen:

[singlepic id=16 w=410 h=169 float=center]

2) Mediante jQuery, con el selector jerárquico prev ~ siblings se ocultan los elementos hermanos de cada bloque a partir del primer <li>, que es el que empleamos com opción principal.

  • <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
  • <script type="text/javascript">
  • $.noConflict();
  • jQuery(document).ready(function($) {
  • jQuery("#bloque_1 li ~li").css("display", "none");
  • jQuery("#bloque_2 li ~li").css("display", "none");
  • jQuery("#bloque_3 li ~li").css("display", "none");
  • jQuery("#bloque_1").hover(
  • function(){
  • jQuery("#bloque_1 li ~li").css("display", "block");
  • },
  • function(){
  • jQuery("#bloque_1 li ~li").css("display", "none");
  • }
  • );
  • jQuery("#bloque_2").hover(
  • function(){
  • jQuery("#bloque_2 li ~li").css("display", "block");
  • },
  • function(){
  • jQuery("#bloque_2 li ~li").css("display", "none");
  • }
  • );
  • jQuery("#bloque_3").hover(
  • function(){
  • jQuery("#bloque_3 li ~li").css("display", "block");
  • },
  • function(){
  • jQuery("#bloque_3 li ~li").css("display", "none");
  • }
  • );
  • });
  • </script>

Práctica: una capa overlay

Bueno, pues, con todo lo que sabemos ya, la siguiente práctica es bien sencilla. Hay que hacer una caja (1) que se despliegue al pulsar un enlace (2), la cual debe tener además un botón cerrar (3).

Pista: conviene recordar cómo funciona la propiedad z-index.

Algo parecido a esta imagen:

[singlepic id=18 w=600 h=423 float=center]

¿Nos va gustando más jQuery?  😉

|| Tags: ,

valoración de los lectores sobre jQuery Blues: 5.Eventos básicos

  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • 4.9 sobre 5 (11 votos)

¿Te ha parecido útil o interesante esta entrada?
dormido, valoración 1 nadapensativo, valoración 2 un poco sonrisa, valoración 3 a medias guiño, valoración 4 bastante aplauso, valoración 5 mucho

Tú opinión es muy importante, gracias por compartirla!

Una respuesta a “jQuery Blues: 5.Eventos básicos