Documentos de Académico
Documentos de Profesional
Documentos de Cultura
• Gestión de Eventos
- Manejadores como atributos de elementos HTML
- Manejadores de eventos como funciones externas
- Manejadores de eventos semánticos
• Objeto Event
- Captura de eventos
- Flujo de eventos
- Supresión de eventos
- Cancelación de eventos
- Eliminación de eventos
- Generar eventos
Tema 4.2.
Modelo de objetos del documento. Event
Gestión de Eventos
El modelo de eventos fue estandarizado por el W3C en DOM Level 2
Un mismo tipo de evento puede estar definido para varios
elementos HTML diferentes y un mismo elemento HTML puede tener
asociados varios eventos distintos
JavaScript define la variable especial this, se crea automáticamente. Se puede utilizar para
referirse al elemento HTML que ha provocado el evento
Este método no debe utilizarse debido a que mezcla la lógica de la programación JavaScript con el
marcado HTML con las consecuencias que eso conlleva.
Tema 4.2.
Modelo de objetos del documento. Event
Gestión de Eventos
Manejadores de eventos como funciones externas: NO
Consiste en extraer todas las instrucciones de JavaScript del archivo HTML y agruparlas en
una función externa
<div style="width:150px;height:60px; border:thin solid silver"
onmouseover="resalta(this)" onmouseout="resalta(this)">
</div>
Al pasar this como parámetro, es posible acceder de forma directa desde la función
externa a las propiedades del elemento que ha provocado el evento
function resalta(elemento){
switch(elemento.style.borderColor) {
case 'silver':
elemento.style.borderColor = 'black';
break;
case 'black':
elemento.style.borderColor = 'silver';
break;
}
}
Tema 4.2.
Modelo de objetos del documento. Event
Gestión de Eventos
Manejadores de eventos semánticos: NO
• Es una evolución del método de las funciones externas. Se basa en las
propiedades DOM de HTML para asignar todas las funciones externas que actúan de
manejadores de eventos
• La página se debe cargar completamente antes de que se puedan utilizar las
funciones DOM
<button id="boton" onclick="alert(‘Hola’)>Saludar</button>
Se puede transformar en:
// Elemento HTML
<button id=“boton“>Saludar</button>
// Función externa
function muestraMensaje() {
alert('Hola');
}
Tema 4.2.
Modelo de objetos del documento. Event
Gestión de Eventos
Manejadores de eventos semánticos
Impide que se escriba ningún carácter en el objeto ya que el manejador de eventos devuelve
false
<textarea onkeypress="return false;"></textarea>
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
La referencia del objeto del evento se pasa a la función que maneja el evento
como un parámetro predefinido, llamado event
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
Captura de eventos. addEventListener
document.getElementById('zonainteractiva').addEventListener('click',()=>{al
ert('¡Alerta!');
});
En lugar de:
document.getElementById('zonainteractiva').addEventListener('click',alerta)
;
function alerta(){
alert('¡Alerta!');
}
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
Captura de eventos
<p>
Aquí se capturan eventos asociados
a un <span id="miSpan">elemento</span> HTML
</p>
let miSpan=document.getElementById("miSpan");
let veces=0;
miSpan.addEventListener("click",()=>{
veces++;
console.log(`El usuario ha hecho ${veces} clic en el span`);
})
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
Captura de eventos
En la definición de la función llamada desde addEventListener, se le puede pasar
como parámetro una variable que referenciará al objeto que ha recibido el evento:
(más adelante lo usaremos luego con la propiedad target):
miSpan.addEventListener("click",(objetoEvento)=>{
console.log(objetoEvento);
})
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
Captura de eventos
Propiedades del objeto evento:
Propiedad Utilidad
altKey Devuelve si la tecla [Alt| fue pulsada durante el evento.
Cuando hacemos clic en span no sólo lo estamos haciendo sobre él, sino
sobre p y sobre section. Si sólo hay una función asignada a una escucha para
el span no hay mayor problema, pero si además hay una para p y otra para el
section, ¿cuál es el orden en que se deben lanzar las tres funciones?
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
Flujo de eventos
Por defecto, se propaga desde el elemento más interno al más externo. Pero
hay dos formas, según el siguiente cuadro ( según el tercer argumento de
addeventListener):
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
Flujo de eventos
html
body
div
p Burbuja
input
button
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
Flujo de eventos
Método Captura:
let miSection=document.getElementsByTagName("section")[0];
let miP=document.getElementsByTagName("p")[0];
let miSpan=document.getElementById("miSpan");
miSection.addEventListener("click",()=>{
console.log("<section>:Capturando el evento");
},true);
miP.addEventListener("click",()=>{
console.log("<p>:Capturando el evento");
},true);
miSpan.addEventListener("click",()=>{
console.log("<span>:Capturando el evento");
},true);
Pero así se cancela el comportamiento por defecto, no el evento en sí. Para eso se utiliza
removeEventListener.
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
Eliminación de Eventos
removeEventListener
Elimina un evento de la lista de eventos registrados con addEventListener.
La anulación no se puede hacer cuando la definición de un evento se hace con
una función anónima, sólo es posible cuando se utilizan funciones con
identificador.
objeto.removeEventListener(tipo, función)
function miCallback(){
console.log("evento anulado tras su primera ejecucion");
miSpan.removeEventListener("click",miCallback);
} Se ejecuta una vez la función, y a
let miSpan=document.getElementById("miSpan");
continuación se elimina el evento
miSpan.addEventListener("click",miCallback);
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
Generar eventos
Constructor de eventos
Podemos crear objetos Event así:
dispatchEvent
Después de que se crea un objeto de evento, debemos “ejecutarlo” en un elemento
usando dispatchEvent. Luego, los controladores reaccionan como si fuera un evento
normal del navegador.
Lanza un evento en el sistema de eventos. El evento está sujeto al mismo
comportamiento y capacidades que si fuera un evento de lanzamiento directo
objeto.dispatchEvent(evento)
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
Generar eventos
Ejemplo:
<a id="miEnlace" href="google.es">Enlace</a>
<span id="miSpan">Ejecutar el evento del enlace</span>
let miSpan=document.getElementById("miSpan");
let miEnlace=document.getElementById("miEnlace");
miEnlace.addEventListener("click",(evento)=>{
evento.preventDefault();
console.log("Gestor del evento del enlace");
});
miSpan.addEventListener("click",()=>{
let miEvento=new Event("click");
console.log("Lanzando evento");
miEnlace.dispatchEvent(miEvento);
});
Tema 4.2.
Modelo de objetos del documento. Event
Objeto Event
PRÁCTICA 1
Crea una página como la siguiente, donde al pulsar cada botón incrementa o
drecrement la Etiqueta. Además, cada vez que se pulse del ratón dentro de la
zona verde o azul, se incrementa la etiqueta “Has hecho click X veces”. El botón
Borrar pone a 0 el contador y la etiqueta anterior.