Interacción con el usuario. Eventos.
Manejadores como atributos de elementos en línea
Forma menos profesional y más facil
<p onclick="funcion(this);">
p.onclick = cambiar;
Resumiendo: el principal inconveniente de los manejadores como atributos de elementos en línea es que el código HTML se complica en exceso en cuanto se añaden algunas pocas instrucciones, por lo que solamente es recomendable para casos sencillos y puntuales.
En las funciones externas no es posible utilizar la variable this de la misma forma que en los manejadores insertados en los atributos HTML. Por tanto, es necesario pasar la variable “this” como parámetro a la función manejadora:
<a href="http://www.google.com" onclick="alertar(); return false;">Pulsa aquí para ver qué se ejecuta</a>
<script>
function alertar() {
alert("Vamos a Google");
}
</script>
<script>
function alertar() {
alert("Vamos a Google");
}
</script>
elemento.addEventListener
(“click”, funcion(){
});
elemento.removeEventListe
ner(“click”, function());
elemento.addEventListener(“click”, funcion );
window.event -> e.type == “click” etc
e.target == “p” || e.target.id == “idP”
onclick=”alerta(); return false;” Primero alerta y no te lleva a ningun lado mas, si pones true, si.
Modelo de registro de eventos de la W3C
Modelo más utilizado.
La sintaxis básica para añadir un manejador a un evento indicado se realiza con la sintaxis:
elemento.addEventListener("<evento_sin_on>",<función>,<false|true>);
y podemos eliminar o cancelar el evento con el siguiente método:
elemento.removeEventListener("<evento_sin_on>",<función>);
Veamos un ejemplo:
Este modelo también nos permite aplicar funciones anónimas las cuales son eventos que no tienen un nombre determinado:
Una posibilidad muy importante que nos ofrecen las funciones anónimas es la posibilidad de llamar a funciones a los que tengamos que pasarle parámetros:
Como vemos una de las ventajas que ofrece este modelo es que podemos añadir todos los manejadores que deseemos a los mismos eventos de los mismos elementos HTML.
Una posibilidad muy importante que nos ofrecen las funciones anónimas es la posibilidad de llamar a funciones a los que tengamos que pasarle parámetros:
Como vemos una de las ventajas que ofrece este modelo es que podemos añadir todos los manejadores que deseemos a los mismos eventos de los mismos elementos HTML.
Extraer información de los eventos - reutilización de código
La propiedad “window.event” nos resultará fundamental ya que gracias a esta podemos obtener información sobre los eventos, y entre las propiedades que podemos usar destacaremos 2:
window.event.type: nos da información sobre el tipo de evento generado (onclick, mouseover, etc).
window.event.target.id: nos devuelve el “id” del elemento HTML que ha generado el evento.
Veamos un ejemplo de su utilización:
Tipos de eventos
Eventos de ratón
Los eventos de ratón son, con mucha diferencia, los más empleados en las aplicaciones web. Los eventos que se incluyen en esta clasificación son los siguientes:
- click: Se produce cuando se pulsa el botón izquierdo del ratón. También se produce cuando el foco de la aplicación está situado en un botón y se pulsa la tecla ENTER.
- dblclick: Se produce cuando se pulsa dos veces el botón izquierdo del ratón.
- mousedown: Se produce cuando se pulsa cualquier botón del ratón.
- mouseout: Se produce cuando el puntero del ratón se encuentra en el interior de un elemento y el usuario mueve el puntero a un lugar fuera de ese elemento.
- mouseover: Se produce cuando el puntero del ratón se encuentra fuera de un elemento y el usuario mueve el puntero hacia un lugar en el interior del elemento.
- mouseup: Se produce cuando se suelta cualquier botón del ratón que haya sido pulsado.
- mousemove: Se produce (de forma continua) cuando el puntero del ratón se encuentra sobre un elemento.
Eventos de teclado
Los eventos que se incluyen en esta clasificación son los siguientes:
- keydown: Se produce cuando se pulsa cualquier tecla del teclado. También se produce de forma continua si se mantiene pulsada la tecla.
- keypress: Se produce cuando se pulsa una tecla correspondiente a un carácter alfanumérico (no se tienen en cuenta teclas como SHIFT, ALT, etc.). También se produce de forma continua si se mantiene pulsada la tecla.
- keyup: Se produce cuando se suelta cualquier tecla pulsada.
Eventos HTML
Los eventos HTML definidos se recogen en la siguiente tabla:
- load: Se produce en el objeto window cuando la página se carga por completo. En el elemento <img> cuando se carga por completo la imagen. En el elemento` cuando se carga el objeto.
- unload: Se produce en el objeto window cuando la página desaparece por completo (al cerrar la ventana del navegador por ejemplo). En el elemento <object> cuando desaparece el objeto.
- abort: Se produce en un elemento <object> cuando el usuario detiene la descarga del elemento antes de que haya terminado.
- error: Se produce en el objeto window cuando se produce un error de JavaScript. En el elemento <img> cuando la imagen no se ha podido cargar por completo y en el elemento <object> cuando el elemento no se carga correctamente.
- select: Se produce cuando se seleccionan varios caracteres de un cuadro de texto (<input> y <textarea>).
- change: Se produce cuando un cuadro de texto (<input> y <textarea>) pierde el foco y su contenido ha variado. También se produce cuando varía el valor de un elemento <select>.
- submit: Se produce cuando se pulsa sobre un botón de tipo submit (<input type="submit">).
- reset: Se produce cuando se pulsa sobre un botón de tipo reset (<input type="reset">).
- resize: Se produce en el objeto window cuando se redimensiona la ventana del navegador.
- scroll: Se produce en cualquier elemento que tenga una barra de scroll, cuando el usuario la utiliza. El elemento <body> contiene la barra de scroll de la página completa.
- focus: Se produce en cualquier elemento (incluido el objeto window) cuando el elemento obtiene el foco.
- blur: Se produce en cualquier elemento (incluido el objeto window) cuando el elemento pierde el foco.
Enlaces de ayuda: