Na programación tradicional, as aplicacións son executadas de xeito secuencial de principio a fin de producir os seus resultados. Non obstante, na actualidade o modelo predominante é o da programación baseada en eventos. Os scripts e programas esperan sen facer ningunha tarefa ata que se produza un evento. Unha vez producido, executan algunha tarefa asociada á aparición dese evento e cando conclúe, o script ou o programa retorna ao estado de espera.
JavaScript permite scripts con ambos os métodos de programación: secuencial e baseado en eventos. Os eventos de JavaScript permiten a interacción entre aplicacións e usuarios de JavaScript. Cada vez que se preme un botón, ocorre un evento. Cada vez que se preme unha chave, tamén se produce un evento. Non obstante, para que se produza un evento, non é obrigatorio que o usuario intervén, xa que por exemplo, cada vez que se carga unha páxina, tamén se produce un evento.
Domingo Nivel 1 non inclúe especificacións relacionadas con Eventos de JavaScript. Domingo Nivel 2 inclúe determinados aspectos relacionados cos eventos e DOM Nivel 3 inclúe a especificación completa dos eventos de JavaScript. Desafortunadamente, a especificación DOM Nivel 3 foi publicada en 2004, máis de dez anos despois de que os primeiros navegadores incluían eventos.
Por este motivo, moitas das propiedades e métodos actuais relacionados cos eventos son incompatibles cos de Sun .. De feito, os navegadores como Internet Explorer tratan os eventos despois do seu propio modelo incompatible co estándar.
O modelo de evento sinxelo foi introducido na versión 4 do estándar HTML e considérase parte do nivel de DOM máis básico. Aínda que as súas características son limitadas, é o único modelo que é compatible con todos os navegadores e, polo tanto, o único que permite crear aplicacións que funcionen do mesmo xeito en todos os navegadores.
15.1 Tipos de eventos
Cada elemento XHTML ten a súa propia lista de eventos posibles que se poden asignar. O mesmo tipo de evento (por exemplo, premendo no botón esquerdo do rato) pode definirse para varios elementos XHTML eo mesmo elemento XHTML pode ter diferentes eventos asociados.
O nome dos eventos está construído a través do prefixo on
, seguido do nome en inglés da acción asociada ao evento. Así, o evento de facer clic nun elemento co rato é chamado onclick
eo evento asociado co movemento do rato se chama onmousemove
.
A seguinte táboa resume os eventos máis importantes definidos por JavaScript:
evento | Descrición | elementos para os que está definido |
---|---|---|
onblur |
un elemento perde o | <button> , <input> , , <select> , , |
onchange |
Un elemento foi modificado | <input> , <select> , <textarea> |
onclick |
Prema e solte o rato | Todos elementos |
ondblclick |
Prema dúas veces nunha fila co rato | Todos os elementos |
onfocus |
Un elemento recibe o foco | <button> , <input> , <label> , <select> , <textarea> , |
onkeydown |
Prema unha tecla e non a libera | elementos de formulario e |
onkeypress |
Prema A | Elementos do formulario e |
onkeyup |
Liberar unha tecla pulsada | Elementos do formulario e |
onload |
Páxina totalmente cargada | |
onmousedown |
Prema un botón do rato e non o libere | Todos os elementos |
onmousemove |
Mover o Rato | Todos os elementos |
onmouseout |
o rato “follas” de | Todos os elementos |
onmouseover |
o rato “entra” no | elementos |
onmouseup |
solte o botón do rato | Todos elementos |
onreset |
Inicializar o formulario | <form> |
onresize |
Modificar o tamaño da xanela | |
onselect |
Seleccione un texto | <input> , |
onsubmit |
Enviar a |
|
onunload |
A páxina está abandonada, por exemplo ao pechar o navegador Dor |
Os eventos máis utilizados nas aplicacións web tradicionais son onload
para agardar a páxina completa da páxina, eventos onclick
, onmouseover
, onmouseout
para controlar o rato e onsubmit
para controlar o envío do Formularios.
Algúns eventos da táboa anterior (onclick
, onkeydown
, onreset
, onsubmit
) permítelle evitar “acción predeterminada” dese evento. Máis tarde, este comportamento móstrase en detalle, que pode ser moi útil nalgunhas técnicas de programación.
Accións típicas que un usuario realiza nunha páxina web pode levar a unha sucesión de eventos. Premendo por exemplo nun tipo son activados onmousedown
, onclick
, onmouseup
e onsubmit
consecutivamente.
15.1.1 Xestores de eventos
Un evento de JavaScript por si só carece de utilidade. Para que os eventos sexan útiles, deben asociarse funcións ou código de JavaScript con cada evento. Deste xeito, cando se produce un evento, o código indicado execútase, polo que a aplicación pode responder a calquera evento que se produza durante a execución.
As funcións ou código JavaScript que están definidas para cada evento que se chaman eventos Xerente (manipuladores de eventos en inglés) e como Javascript é un idioma moi flexible, hai varias formas diferentes de indicar os manipuladores:
- manipuladores como atributos dos elementos XHTML.
- Manipuladores como funcións de JavaScript externo.
- “manipuladores semánticos”.
15.1.1.1 manipuladores como os atributos XHTML
Este é o método máis sinxelo e menos profesional de indicar o código JavaScript que debe ser executado cando ocorre un evento. Neste caso, o código está incluído nun atributo do propio elemento XHTML. No seguinte exemplo, quere mostrar unha mensaxe cando o usuario perfore co rato sobre un botón:
<input type="button" value="Pinchame y verás" onclick="console.log('Gracias por pinchar');" />
Neste Método, os atributos XHTML están definidos co mesmo nome que os eventos que desexa manexar. O exemplo anterior só quere controlar o evento de pinchazo co rato, cuxo nome é onclick
. Así, o elemento XHTML para o que desexa definir este evento, debe incluír un atributo chamado onclick
.
O contido do atributo é unha cadea de texto que contén Todas as instrucións de JavaScript executadas cando ocorre o evento. Neste caso, o código JavaScript é moi sinxelo (console.log('Gracias por pinchar');
), xa que só se trata de mostrar unha mensaxe.
Neste outro exemplo, cando o usuario faga clic en No elemento
Mostra unha mensaxe e cando o usuario pasa o rato sobre o elemento, aparece outra mensaxe:
<div onclick="console.log('Has pinchado con el ratón');" onmouseover="console.log('Acabas de pasar el ratón por encima');"> Puedes pinchar sobre este elemento o simplemente pasar el ratón por encima</div>
Este outro exemplo inclúe unha das instrucións máis utilizadas nas aplicacións máis antigas de JavaScript:
<body onload="console.log('La página se ha cargado completamente');"> ...</body>
A mensaxe anterior amósase despois de que a páxina está totalmente cargada, é dicir, despois de que o seu código HTML foi descargado, as súas imaxes e calquera outro obxecto incluído na páxina.
O evento
15.1.1.2 Xestores de eventos e variable Esta
JavaScript define unha variable especial chamada this
que se crea automaticamente e iso é Emprega nalgunhas técnicas avanzadas de programación. Nos eventos, pode usar a variable this
para referirse ao elemento XHTML que causou o evento. Esta variable é moi útil para exemplos como o seguinte:
Cando o usuario pasa o rato sobre o <div>
, a cor do bordo móstrase negro. Cando o rato deixa o <div>
, o bordo aparece de novo coa cor gris clara orixinal.
<div style="width:150px; height:60px; border:thin solid silver"> Sección de contenidos...</div>
/ div>
Se a variable non se usa this
, o código necesario para modificar a cor dos bordos, sería o seguinte:
O código anterior é demasiado longo e moi propenso a cometer erros. Dentro do código dun evento, JavaScript crea automaticamente a variable this
, que se refire ao elemento XHTML que causou o evento. Así, o exemplo anterior pode ser reescrito do seguinte xeito:
<div style="width:150px; height:60px; border:thin solid silver" onmouseover="this.style.borderColor='black';" onmouseout="this.style.borderColor='silver';"> Sección de contenidos...</div>
O código anterior é moito máis compacto, máis fácil de ler e escribir e seguir traballo correctamente, aínda que o valor do atributo ID de <div>
.
15.1.1.3 Xestores de eventos como funcións externas
A definición de manipuladores de eventos nos atributos XHTML é un método sinxelo pero sen compensación para xestionar eventos de JavaScript. O principal inconveniente é que é complicado en exceso axiña que se engaden algunhas instrucións, polo que só se recomenda para os casos máis simples.
Cando o código da función de manexo é máis complexo, como o Validación dun formulario, é aconsellable agrupar todo o código JavaScript nunha función externa invocada desde o código XHTML cando ocorre o evento.
Deste xeito, o seguinte exemplo:
<input type="button" value="Pinchame y verás" onclick="console.log('Gracias por pinchar');" />
pode ser transformado en:
function muestraMensaje() { console.log('Gracias por pinchar');}
<input type="button" value="Pinchame y verás" onclick="muestraMensaje()" />
en funcións externas Non é posible usar a variable this
do mesmo xeito que en Os manipuladores inseridos nos atributos XHTML. Polo tanto, é necesario pasar a variable this
como parámetro para a función de manipulación:
function resalta(elemento) { switch(elemento.style.borderColor) { case 'silver': case 'silver silver silver silver': case '#c0c0c0': elemento.style.borderColor = 'black'; break; case 'black': case 'black black black black': case '#000000': elemento.style.borderColor = 'silver'; break; }}
No exemplo anterior, a función externa pasa o parámetro this
que Dentro da función chámase elemento
. Pasando this
como parámetro, é posible acceder directamente desde a función externa ás propiedades do elemento que provocou o evento.
Por outra banda, o exemplo anterior é complicado pola forma en que os diferentes navegadores almacenan o valor da propiedade borderColor
. Mentres as tendas de Firefox (no caso de que os catro bordos coincidan coa cor) o valor simple black
, Internet Explorer almacena-lo como black black black black
e ópera almacena o seu hexadecimal representación #000000
.
15.1.1.4 manipuladores de eventos semánticos
Utilizar os atributos XHTML ou as funcións externas para engadir xestores de eventos teñen un inconveniente grave : “Incrustar” o código XHTML da páxina.
Como se sabe, ao crear páxinas web recoméndase separar os contidos (XHTML) da presentación (CSS). Tanto como sexa posible, tamén se recomenda separar os contidos (XHTML) da programación (JavaScript). Mestura Javascript e XHTML excesivamente complica o código fonte da páxina, fai que o seu mantemento sexa difícil e reduce a semántica do documento final producido.
Afortunadamente, hai un método alternativo para definir os controladores de eventos de JavaScript. Esta técnica é asignar funcións externas utilizando as propiedades DOM dos elementos XHTML. Así, o seguinte exemplo:
<input type="button" value="Pinchame y verás" onclick="console.log('Gracias por pinchar');" />Se puede transformar en:
function muestraMensaje() { console.log('Gracias por pinchar');}document.getElementById("pinchable").onclick = muestraMensaje;
<input type="button" value="Pinchame y verás" />
O código XHTML resultante é moi “limpo”, xa que non se mestura co código JavaScript. A técnica de xestores semánticos consta de:
- Asignar un identificador único ao elemento XHTML usando o atributo de identificación.
- Crear unha función de JavaScript encargada de manipular o evento.
- Asignar a función a un evento específico do elemento XHTML usando DOM.
Outra vantaxe adicional desta técnica é que as funcións externas poden usar a variable this
referido ao elemento que o evento orixinal.
Asignar a función de manipular Usando DOM é un proceso que require unha explicación detallada. En primeiro lugar, obtén a referencia do elemento ao que se asignará o controlador:
document.getElementById("pinchable");
Seguinte, está asignado a Función externa ao evento desexado mediante unha propiedade de elemento co mesmo nome do evento:
document.getElementById("pinchable").onclick = ...
Finalmente, o externo Función. Como xa se mencionou nos capítulos anteriores, o máis importante (e a causa máis común de erros) é indicar só o nome da función, é dicir, dispensar os parénteses asignando a función:
Se se engaden os parénteses ao final, a función está a ser invocada e asignada o valor devolto pola función ao evento onclick
.
O único inconveniente deste método é que os manipuladores están asignados usando as funcións DOM, que só se poden usar despois de que a páxina fose totalmente cargada. Deste xeito, de xeito que a asignación dos manipuladores non é errónea, é necesario asegurarse de que a páxina xa foi cargada.
Unha das formas máis sinxelas de garantir que un determinado código vai Executarse despois de que a páxina está completamente cargada é usar o evento onload
:
window.onload = function() { document.getElementById("pinchable").onclick = muestraMensaje;}
A arte anterior utiliza unha función anónima para asignar algunhas instrucións ao evento onload
da páxina (neste caso foi definido polo obxecto ). Deste xeito, para garantir que un determinado código será executado despois de cargar a páxina, só é necesario incluílo dentro da próxima construción:
window.onload = function() { ...}
15.2 O fluxo de eventos
Ademais dos eventos básicos que se viron, os navegadores inclúen un mecanismo relacionado chamado fluxo de eventos ou “fluxo de evento”. O fluxo de eventos permite que varios elementos diferentes poidan responder ao mesmo evento.
Se un elemento <div>
cun botón defínese no seu interior cando o usuario faga clic en O botón, o navegador permítelle asignar unha función de resposta de botón, outra función de resposta ao <div>
que o contén e outra función de resposta á páxina completa. Deste xeito, un único evento (a pulsación dun botón) provoca a resposta de tres elementos na páxina (incluída a páxina en si).
A orde na que se executan os eventos asignados a cada elemento a páxina é o que constitúe o fluxo de eventos. Ademais, hai moitas diferenzas no fluxo de eventos de cada navegador.
15.2.1 Evento burbulla
Neste modelo de fluxo de eventos, a orde que se segue é do elemento máis específico para o elemento menos específico.
Nos seguintes exemplos, úsase a seguinte páxina HTML:
<html onclick="procesaEvento()"> <head><title>Ejemplo de flujo de eventos</title></head> <body onclick="procesaEvento()"> <div onclick="procesaEvento()">Pincha aqui</div> </body></html>
cando se preme no texto “Prema aquí” que está dentro do <div>
, os seguintes eventos execútanse na orde que mostra o seguinte esquema:
Figura 15.1 “Evento burbbling” Operation Scheme
O primeiro evento que se ten en conta é o que xerou o
.
Este modelo de fluxo de eventos é o que inclúe o Internet Explorer Navegador. Os navegadores da familia Mozilla (por exemplo Firefox) tamén apoian este modelo, pero ligeramente modificados. O exemplo anterior nun navegador de familia Mozilla presenta o seguinte fluxo de eventos:
Figura 15.2 “Bubling de eventos “Esquema de operación en navegadores de Mozilla
Aínda que o obxecto non forma parte do DOM, o fluxo de eventos implementados por Mozilla viaxan os ascendentes do elemento ata o mesmo obxecto , engadindo un evento máis ao modelo de Internet Explorer.
15.2.2 Captura de eventos
Nesa outra Modelo, o fluxo de eventos defínese a partir do elemento menos específico ao elemento máis específico. Noutras palabras, o mecanismo definido é precisamente o contrario do “evento burbulling”. Este modelo foi usado polo navegador NetScape Netscape NetScape Navegador de Netscape 4.0.
15.2.3 Eventos DOM
O fluxo de eventos definido na especificación do sol apoia a burbulla e a captura, pero o “evento” Capturar “corre primeiro. Os dous fluxos de eventos percorren todos os obxectos DOM do obxecto document
ao elemento máis específico e viceversa. Ademais, a maioría dos navegadores implementan os estándares, o fluxo continúa ata o obxecto .
O fluxo de evento DOM desde o exemplo anterior amósase a continuación:
Figura 15.3 Esquema de fluxo de eventos do modelo DOM
o máis específico O elemento do fluxo do evento non é o <div>
que desencadea a execución dos eventos, pero o tipo nodo TextNode
que contén a <div>
. O feito de combinar os dous fluxos de eventos, fai que o nodo máis específico execute consecutivamente dous eventos.
15.3 manipuladores e oíntes
Nas seccións anteriores o concepto foi introducido desde “Manipulador de eventos “O manipulador de eventos, que son as funcións que responden a eventos que ocorren. Ademais, tres formas de definir os manipuladores de eventos foron vistos para o modelo de evento básico:
- Código JavaScript dentro dun atributo do elemento HTML
- Definición do evento no HTML elemento en si, pero o controlador é unha función externa
- manipuladores semánticos asignados a través do sol sen a necesidade de modificar o código HTML da páxina
calquera destes modelos funciona correctamente en Todos os navegadores dispoñibles hoxe. As diferenzas entre os navegadores xorden cando máis dun manipulador de eventos defínese para o mesmo evento dun elemento. A forma de asignar e “disascar” as asas múltiples depende completamente do navegador usado.
15.3.1 DOM Evento Manipuladores
A especificación SDI define outros dous métodos similares aos dispoñibles para Internet Explorador e chamado addEventListener()
e removeEventListener()
para asociar e disociar os manipuladores de eventos.
A principal diferenza entre estes métodos E o anterior é que neste caso son necesarios tres parámetros: o nome do “oínte de eventos”, unha referencia á función responsable do procesamento do evento e do tipo de fluxo de eventos aos que se aplica.
O primeiro argumento non é o nome completo do evento como ocorre no modelo de Internet Explorer, pero ten que eliminar o prefixo on
. Noutras palabras, se en Internet Explorer o nome onclick
agora será usado click
.
O terceiro parámetro é true
, o controlador úsase na fase de captura. Se o terceiro parámetro é false
, o controlador está asociado coa fase de burbullas.
A continuación, os exemplos anteriores amósanse utilizando os métodos definidos por DOM:
function muestraMensaje() { console.log("Has pulsado el ratón");}var elDiv = document.getElementById("div_principal");elDiv.addEventListener("click", muestraMensaje, false); // Más adelante se decide desasociar la función al eventoelDiv.removeEventListener("click", muestraMensaje, false);
asociando múltiples Funcións a un único evento:
function muestraMensaje() { console.log("Has pulsado el ratón");} function muestraOtroMensaje() { console.log("Has pulsado el ratón y por eso se muestran estos mensajes");} var elDiv = document.getElementById("div_principal");elDiv.addEventListener("click", muestraMensaje, true);elDiv.addEventListener("click", muestraOtroMensaje, true);
Se unha función está asociada a un fluxo de evento dado, que a función só pode ser disociada en o mesmo tipo de fluxo de eventos. Se se considera o seguinte exemplo:
function muestraMensaje() { console.log("Has pulsado el ratón");} var elDiv = document.getElementById("div_principal");elDiv.addEventListener("click", muestraMensaje, false); // Más adelante se decide desasociar la función al eventoelDiv.removeEventListener("click", muestraMensaje, true);
Os últimos intentos de instrucións de disciar a función No fluxo de eventos de captura, mentres que ao asocialo, indicouno o fluxo de eventos burbullas. Aínda que a execución da aplicación non se detén e non se produce ningún erro, a última instrución non ten ningún efecto.
15.4 O evento
Cando ocorre un evento, non é suficiente con asignar unha función responsable do procesamento deste evento. Normalmente, a función que procesa o evento necesita información sobre o evento producido: a clave que foi presionada, a posición do rato, o elemento que produciu o evento, etc.
o obxecto é o mecanismo definido polos navegadores para proporcionar toda esa información. É un obxecto que se crea automaticamente cando ocorre un evento e que é destruído automaticamente cando se executaron todas as funcións asignadas ao evento.
O domingo especifica que o obxecto event
é o único parámetro que debe ir ás funcións responsables do procesamento de eventos. Polo tanto, en navegadores que seguen os estándares, pódese acceder ao obxecto event
a través da matriz dos argumentos da función:
Tamén se pode indicar o argumento de nome explícitamente:
elDiv.onclick = function(event) { ...}
o O funcionamento dos navegadores que seguen os estándares poden parecer “máxicos”, xa que na Declaración da función indícase que ten un parámetro, pero na aplicación non se transmite ningún parámetro a esa función. En realidade, os navegadores que seguen os estándares crean automaticamente ese parámetro e sempre o pasan á función encargada de manexar o evento.
15.4.1 Propiedades e métodos
Aínda que o mecanismo definido por Os navegadores para o obxecto event
son similares, hai moitas diferenzas axiña que as propiedades e métodos do obxecto.
15.4.1.1 Propiedades definidas por dom
A seguinte táboa recolle as propiedades definidas para o “DIV id =” CAC86E0226 “obxecto> nos navegadores que seguen os estándares:
propiedade / método | devolve | Descrición |
---|---|---|
altKey |
booleano | Devolve Se a tecla
e |
booleano | indica se o evento pertence ao fluxo de eventos de burbullas | |
button |
número enteiro | o botón do rato que foi presionado.Valores posibles: 0 – sen botón presionado 1 presionado izquierdo 2 – Se ha pulsado el botón derecho 3 – Se pulsan a la vez el botón izquierdo y el derecho 4 – Se ha pulsado el botón central 5 – Se pulsan a la vez el botón izquierdo y el central 6 – Se pulsan a la vez el botón derecho y el central 7` – preséntanse ao mesmo tempo o 3 |
cancelable |
booleano | indica se o evento pode cancelar |
cancelBubble |
booleano | indica se o fluxo de eventos de tipo burbulling |
parou charCode |
Número enteiro | O código de carácter Unicode correspondente á tecla pulsada |
clientX |
Número completo | Coordina X da posición do rato con respecto á área visible do |
|
número enteiro | coordenada e a posición do rato re Esbozo da área visible do |
ctrlKey |
booleano | Devolve true Se a tecla e false noutro caso |
currentTarget |
elemento | o elemento que é o obxectivo do evento |
Número completo | O número de veces que se presionaron os botóns do rato | |
eventPhase |
número enteiro | a fase á que pertence o evento: 0 – Fase capturación 1 – no elemento de destino 2 – fase burbbling |
isChar |
booleano | indica se a tecla de presión corresponde a un personaxe |
|
número enteiro | indica o código numérico do Tecla preme |
metaKey |
número completo | devolve Se a tecla
e |
pageX |
número enteiro | coordinar x da posición do rato con respecto á páxina |
pageY |
Número completo | Coordenada e posición do rato con respecto á páxina |
preventDefault() |
úsase para cancelar a acción predefinida do evento | |
relatedTarget |
elemento | o elemento que é o obxectivo secundario do evento ( relacionados con eventos do rato) |
screenX |
número completo | x coordinar o Posición do rato con respecto á pantalla completa |
screenY |
Número enteiro | Coordenada e posición do rato sobre a pantalla completa |
shiftKey |
booleano | devolve true Se a tecla
e noutro caso |
stopPropagation() |
función | úsase para deter o fluxo de eventos de tipo burbulling |
target |
elemento | O elemento que orixina o evento |
timeStamp |
Número | a data e hora en que o evento |
texto string | o nome do evento |
A diferenza do que ocorre con Internet Explorer, a maioría das propiedades do obxecto event
de sol Lectura. En concreto, só as seguintes propiedades son lidas e escribir: altKey
, button
e keyCode
.
a tecla IV id = “tecla 2b9A3FB819″ ” é unha clave especial que está en algúns teclados de ordenador moi antigos. Actualmente, nas computadoras de PC está asimilada á tecla IV = “51C99289D4” ou a tecla de Windows, mentres que en computadoras de tipo Mac está asimilada á tecla
.
15.4.2 Semellanzas e diferenzas entre navegadores
15.4.2.1 semellanzas
En ambos casos, a propiedade do tipo úsase para obter o tipo de evento Isto é sobre:
function procesaEvento(elEvento) { if(elEvento.type == "click") { console.log("Has pulsado el raton"); } else if(elEvento.type == "mouseover") { console.log("Has movido el raton"); }} elDiv.onclick = procesaEvento;elDiv.onmouseover = procesaEvento;
Aínda que o controlador de eventos inclúe o prefixo on
en O seu nome, o tipo de evento devolto pola propiedade type
dispensar a partir dese prefixo.É por iso que no exemplo anterior compara o seu valor con click
e mouseover
e non con onclick
e onmouseover
.
Outra semellanza é o uso da propiedade keyCode
para obter o código correspondente ao carácter da chave que foi presionada. A chave pulsada non sempre representa un carácter alfanumérico. Ao presionar a tecla iv = “2bfc362192” , por exemplo, obtense o código 13
. A barra espaciadora corresponde ao código 32
e a tecla Eliminar ten un código igual a .
máis forma inmediata de comprobar se se presionaron algunhas teclas especiais, é usar as propiedades shiftKey
, altKey
e ctrlKey
.
Para obter a posición do rato con respecto á parte visible da xanela, úsanse as propiedades clientX
e screenY
.
15.4.2.2 Diferenzas
Unha das principais diferenzas é a forma en que se obtén o elemento que orixine o evento. Se un elemento <div>
é asignado un evento onclick
, premendo co rato o interior do <div>
Un evento cuxo obxectivo é orixinario é o .
// Internet Explorervar objetivo = elEvento.srcElement; // Navegadores que siguen los estandaresvar objetivo = elEvento.target;
Outra diferenza importante é que relaciona a obtención do carácter correspondente á clave pulsada. Cada tecla pulsada asociou dous códigos diferentes: o primeiro é o código da chave que foi presionado eo outro código é o que se refire ao personaxe pulsado.
O primeiro código é un código de clave interna Para JavaScript. O segundo código coincide co código de carácter ASCII. Deste xeito, a letra a
ten un código interno igual a 65
e un código ASCII de 97
Por outra banda, a letra A
ten un código interno tamén de 65
e un código ASCII de 95
.
En Internet Explorer, o contido da propiedade keyCode
depende de cada evento. En “Key Press” Eventos (onkeyup
e onkeydown
) O seu valor é igual ao código interno. En “escribir con teclas” Eventos (onkeypress
) o seu valor é igual ao código ASCII do carácter prensado.
Pola contra, nos navegadores que seguen as normas de propiedade keyCode
é igual ao código interno en “Prema a tecla” eventos (onkeyup
e onkeydown
) e é igual a 0
no “Escribir con teclas” eventos (onkeypress
).
Na práctica, isto supón que nos eventos onkeyup
pode usar a mesma propiedade en todos os navegadores:
function manejador(elEvento) { var evento = elEvento || window.event; console.log(" El código de la tecla pulsada es " + evento.keyCode);}document.onkeyup = manejador;document.onkeydown = manejador;
Neste caso, se a páxina está cargada en calquera navegador e presionado, por exemplo, a clave A, a seguinte mensaxe:
Figura 15.4 Mensaxe amosada no navegador de Firefox
A gran diferenza ocorre E ao tentar obter o carácter presionado, neste caso a letra a
. Para obter a carta, primeiro debes obter o teu código ASCII. Como se comenta, en Internet explora o valor da propiedade keyCode
no evento onkeypress
é igual ao personaxe ASCII:
function manejador() { var evento = window.event;
// Internet Explorer var codigo = evento.keyCode;} document.onkeypress = manejador;
Con todo, en navegadores que non son Internet Explorer, O código anterior é igual a 0
para calquera tecla pulsada. Nestes navegadores seguindo os estándares, a propiedade debe ser usada charCode
, que devolve o código da tecla pulsada, pero só para o evento onkeypress
:
function manejador(elEvento) { var evento = elEvento;
// Navegadores que siguen los estándares var codigo = evento.charCode;} document.onkeypress = manejador;
Unha vez obtido o Código en cada navegador, debe usarse a función String.fromCharCode()
para obter o carácter cuxo código ASCII é aprobado como parámetro. Polo tanto, a solución completa para obter a clave pulsada en calquera navegador é a seguinte:
Unha das propiedades máis interesantes que el é a posibilidade de evitar que se complete o comportamento normal dun evento.Noutras palabras, con JavaScript é posible non mostrar ningún personaxe cando se preme unha tecla, non envíe un formulario despois de premer o botón de envío, non cargue ningunha páxina premendo unha ligazón, etc. O método avanzado de evitar que un evento poida executar a súa acción asociada depende de cada navegador:
// Navegadores que siguen los estandareselEvento.preventDefault();
no modelo de evento básico tamén é é posible evitar o comportamento predeterminado dalgúns eventos. Se por exemplo nun elemento <textarea>
indícase o seguinte controlador de eventos:
<textarea onkeypress="return false;"></textarea>
No <textarea>
a anterior non será posible escribir ningún personaxe, xa que o controlador de eventos devolve false
e ese é o valor necesario para evitar Os extremos de executar o evento e, polo tanto, para evitar que a letra estea escrita.
Polo tanto, é posible definir as asas de eventos que retornan ou <textarea>
:
<textarea onkeypress="return limita(100);"></textarea>
O funcionamento do exemplo anterior está detallado a continuación:
- o evento
onkeypress
para controlar se a chave está escrita ou non. - O valor devolto é devolto pola función externa
limita()
a que o valor pasa o valor100
. - Se o valor devolto por
limita()
étrue
, o evento ocorre normalmente e o carácter está escrito no<textarea>
. Se o valor devolto porlimita()
éfalse
, o evento non ocorre e, polo tanto, o personaxe non está escrito no . - a función
limita()
devolver oufalse
Despois de comprobar se o número de caracteres do<textarea>
é maior ou inferior ao número máximo de caracteres que pasaron como parámetro.
O obxecto event
tamén permite deter completamente a execución do fluxo normal de eventos:
// Navegadores que siguen los estandareselEvento.stopPropagation();
Ao deter o fluxo de eventos pendentes, os eventos que permanecen a partir dese momento están superados ata que todos os elementos pendentes sexan executados ata o elemento window
.
15.5 Tipos de eventos
A lista completa de eventos que se poden xerar nun navegador poden dividirse en catro g grandes g rupias. A especificación de DOM define os seguintes grupos:
- eventos do rato: orixínanse cando o usuario usa o rato para realizar algunhas accións.
- Eventos do teclado: orixínanse cando o usuario presiona calquera tecla no seu teclado.
- Eventos HTML: orixínanse cando se producen cambios na xanela do navegador ou cando se producen certas interaccións entre o cliente e o servidor.
- Eventos DOM: orixínanse cando Un cambio ocorre na estrutura DOM da páxina. Tamén se chaman “eventos de mutación”.
15.5.1 Eventos do rato
Os eventos do rato son, con moita diferenza, a maioría dos empregados das aplicacións web. Os eventos que están incluídos nesta clasificación son os seguintes:
evento | Descrición | |
---|---|---|
click |
ocorre cando se preme o botón esquerdo do rato.Tamén ocorre cando o foco da aplicación está situado nun botón e prema a tecla IV = “2BFC362192” tecla | |
dblclick |
ocorre cando se preme o botón esquerdo do rato | |
mousedown |
ocorre cando se preme calquera botón do rato | |
mouseout |
it ocorre cando o punteiro do rato está dentro dun elemento e o usuario move o punteiro a un lugar fóra dese elemento | |
mouseover |
ocorre cando o punteiro do rato está fóra dun elemento e o usuario move o punteiro a un lugar dentro do elemento | |
mouseup |
ocorre cando se libera calquera botón do rato que foi presionado | |
mousemove |
ocorre cando o puntero ou rato está nun elemento |
evento | Descrición |
---|---|
keydown |
ocorre cando preme calquera tecla no teclado. Tamén se produce continuamente se se produce o |
15.5.2.1 propiedades
O obxecto do evento contén as seguintes propiedades para eventos de teclado:
- a propiedade
keyCode
- A propiedade
charCode
(sol só) - a propiedade
srcElement
(Internet Explorer) outarget
(DOM) - Propiedades
shiftKey
,ctrlKey
,altKey
emetaKey
Cando se preme unha tecla a un carácter alfanumérico, ocorre a seguinte secuencia de Eventos: ,
keypress
,keyup
. Cando se preme outro tipo de chave, prodúcese a seguinte secuencia: ,keyup
. Se se celebra a chave, no primeiro caso, os eventos son repetidos de forma continua /div> ekeypress
e no segundo caso, repita o evento continuamente.15.5.3 Eventos HTML
Os eventos HTML definidos son recollidos na seguinte táboa:
evento Descrición load
ocorre no obxecto da xanela cando a páxina está completamente cargado. No `cando o obxecto está cargado tr id =” e0b9e62 “> ocorre no obxecto da xanela cando a páxina desaparece por completo (ao pechar a xanela do navegador por exemplo). No elemento <object>
cando o obxecto desaparece.abort
ocorre nun elemento <object>
cando o usuario detén a descarga do elemento antes de que estea terminadoerror
ocorre no obxecto da xanela cando se produce un erro de JavaScript. No elemento IV = “758E7D16CC” ” cando a imaxe non se puido cargar completamente e no elemento IV =” bacfb08ac8 “” cando o elemento non se carga correctamente select
ocorre cando se seleccionan varios caracteres dunha caixa de texto ( <input>
e<textarea>
)change
ocorre Cando unha caixa de texto ( <input>
e<textarea>
) perde o foco e o seu contido variaba. Tamén ocorre cando o valor dun elemento<select>
TDocorre cando presiona un botón de envío ( <input type="submit">
)reset
ocorre cando preme Nun botón de tipo de restablecemento ( <input type="reset">
)resize
ocorre no obxecto da xanela cando se redime a xanela do navegador scroll
ocorre en calquera elemento que ten unha barra de desprazamento, cando o usuario o usa. O elemento contén a barra de desprazamento da páxina completa
focus
ocorre en calquera elemento (incluído o obxecto da xanela) cando o elemento recibe o fb2bd1e386 “>
ocorre en calquera elemento (incluído o obxecto da xanela) cando o elemento perde o foco 7e66fa8b9a “>
Un dos eventos máis utilizados é o evento load
, xa que todas as manipulacións que se realizan por DOM requiren que a páxina se cargue chea e, polo tanto, a árbore DOM foi completamente construído.
O elemento
Define as propiedadesscrollLeft
escrollTop
que se pode empregar xunto co eventoscroll
.
15.5.4 eventos Sun
Aínda que os eventos deste tipo son parte do A especificación oficial do Sol, aínda non se implementaron en todos os navegadores.A seguinte táboa recolle os eventos máis importantes deste tipo:
evento | Descrición |
---|---|
DOMSubtreeModified |
ocorre cando se engaden ou eliminan os nodos no subárbol dun documento ou |
DOMNodeInserted |
ocorre cando un nodo engádese como un neno doutro nodo |
DOMNodeRemoved |
ocorre cando se elimina un nodo que é fillo doutro nodo |
DOMNodeRemovedFromDocument |
ocorre cando se elimina un nodo |
ocorre cando se engade un nodo ao documento |