Cómo manejar eventos en JavaScript

Cómo manejar eventos en JavaScript

Cómo manejar eventos en JavaScript

Un evento es la acción que desencadena el usuario al interactuar con una página web. Cuando ocurre un evento (hacer click, doble click, seleccionar..) podemos capturarlo mediante un manejador de eventos, es decir, una función asociada a ese evento.

El modelo de eventos forma parte del DOM (Document Object Model), que es una estructura jerárquica de objetos que genera el navegador cuando se carga una página. Esta estructura y contenidos se pueden cambiar dinámicamente con JavaScript. A través del DOM se puede acceder a cualquier elemento (objeto), cambiar sus propiedades o llamar a sus métodos.

Desde que Netscape 2.0 empezó a utilizar el DOM llamado nivel 0, ha ido evolucionando y hoy en día, la última especificación es de nivel 4. Hay que tener en cuenta que no todos los navegadores manejan eventos del mismo modo y existen hasta tres modelos diferentes dependiendo del navegador utilizado.

Vamos a empezar por el nivel básico o nivel 1 del DOM. Este modelo se introdujo para la versión HTML4, y aunque sus capacidades son limitadas, es el único soportado por todos los navegadores y en todos funciona del mismo modo. El nombre de cada evento se construye añadiendo el prefijo «on», seguido del nombre en inglés de la acción asociada al evento, como por ejemplo onclick se denomina al evento de hacer click.

Eventos DOM Nivel 1

Evento Descripción Elementos sobre los que actúa
 onblur Deseleccionar un elemento body, button, input, label, select, textarea
onchange Deseleccionar un elemento modificado input, select, textarea
onclick Hacer click y soltar el ratón Todos los elementos
ondblclick Hacer doble click Todos los elementos
onfocus Seleccionar un elemento body, button, input, label, select, textarea
onkeydown Pulsar una tecla y mantenerla pulsada body y elementos de formulario
onkeypress Pulsar una tecla body y elementos de formulario
onkeyup Soltar una tecla pulsada body y elementos de formulario
onload Página cargada completamente body
onmousedown Pulsar un botón del ratón y mantenerlo pulsado Todos los elementos
onmousemove Mover el ratón Todos los elementos
onmouseout El ratón sale del elemento Todos los elementos
onmouseover El ratón entra en el elemento Todos los elementos
onmouseup Soltar el botón del ratón Todos los elementos
onreset Inicializar el formulario form
onresize Modificar el tamaño de la ventana body
onselect Seleccionar un texto input, textarea
onsubmit Pulsar enviar en un formulario
onunload Cerrar la ventana del navegador body

Cómo manejamos estos eventos

1. Directamente como atributo XHTML del elemento

En el atributo onclick se ponen las instrucciones que se ejecutarán cuando se produzca ese evento, en este caso cuando se hace click con el ratón.

<input type="button" value="Haz Click" onclick="alert('Hola qué tal');"/>

Con este otro método podemos acceder al elemento que desencadena el evento accediendo a la id del mismo.

<input  id="boton" type="button" value="Haz Click" onclick="document.getElementById('boton').value='clickado';"/>

Podemos modificar los estilos de un documento del mismo modo

<div id="caja" style="width:100px; height:60px; border:2px solid red" 
onmouseover="document.getElementById('caja').style.borderColor='blue';"
onmouseout="document.getElementById('caja').style.borderColor='red';">
    //Contenido del div
</div>

2. Usando la variable this.

El lenguaje JavaScript crea automáticamente una variable especial llamada this. En los eventos se puede usar esta variable para referirse al elemento XHTML que ha provocado el evento. Además de resultar un código más corto y fácil de entender que el anterior document.getElementById, aunque cambiemos el id del div funcionará igualmente.

//Div original
<div id="contenido" style="width:200px; height:100px; border:solid yellow">
    //Contenido del div
</div>
//Modificar los estilos de un div sin utilizar la variable this
<div id="caja" style="width:200px; height:100px" 
onmouseover="document.getElementById('caja').style.borderColor='red';" 
onmouseout="document.getElementById('caja').style.borderColor='blue';">
    //Contenido del div
</div>
//Modificar los estilos utilizando la variable this
<div id="contenido" style="width:200px; height:100px; border:solid yellow" 
onmouseover="this.style.borderColor='red';" 
onmouseout="this.style.borderColor='blue';">
    //Contenido del div
</div>

3. Como funciones externas

Aunque el uso de los atributos XHTML para manejar eventos es la forma más rápida, sólo es recomendable cuando se añaden pocas instrucciones. La manera más aconsejable es usando una función externa y llamarla desde el elemento XHTML

<script> 
    function saludo(){ 
        alert("Hola que tal"); 
    } 
</script> 
<input type="button" value="Haz Click" onclick="saludo()"/>

 4. Usando manejadores semánticos

Es una evolución de las funciones externas para manejar eventos. La gran ventaja de este método es que no se mezcla el código html con el JavaScript y el resultado es un código más limpio.

//Declaración normal
<input type="button" id="saludo" value="Haz Click Aquí" onclick="alert('Hola qué tal');"/>
//Usando manejadores semánticos
//Declaración de la función muestraSaludo
function muestraSaludo() {
    alert("Hola qué tal");
}
//Asignamos la función externa al elemento. Sin paréntesis (), motivo común de errores.
document.getElementById("saludo").onclick = muestraSaludo;
//Asignamos un id al elemento XHTML
<input type="button" id="saludo" value="Haz Click Aquí"/>

Si queremos manejar eventos de varios elementos podemos usar clases en vez de ids

<div class="cajas" style="width:100px; height:60px; border:2px solid red" 
onmouseover="document.getElementByClassName('cajas').style.borderColor='blue';"
onmouseout="document.getElementByClassName('cajas').style.borderColor='red';">
</div>

Evitar las acciones por defecto de un elemento XHTML

En JavaScript podemos controlar acciones como el envío de un formulario al pulsar submit o el cierre de una página cuando pulsamos la x de cerrar.

Lo podemos hacer directamente dentro del código html de este modo

//Al poner return false se anula la acción por defecto del enlace a
<a href="tutobasico.com" onclick="salir(); return false">Salir</a>

Podemos hacerlo con una función externa

<a href="tutobasico.com" onclick="return salir()">Salir</a>

function salir() {
    return confirm("¿Seguro que quieres salir?");
}

El inconveniente de utilizar las funciones del DOM es que hay que esperar que la página cargue completamente para que se construya todo el árbol de nodos. Para asegurarnos que esto sucede una buena práctica es meter todo el código que utilice funciones del DOM dentro de una función onload. De este modo nos aseguramos que no se ejecutará hasta que la página cargue completamente.

window.onload = function{
  //Aquí el código
}

Si te ha gustado no olvides compartir en redes sociales.

Espero que te haya servido. Cualquier duda deja un comentario. Un saludo

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Translate »
Ir a la barra de herramientas