Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/01/2010, 18:14
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Problema al Programar evento onkeyPress

jejeje, es bien gracioso verte sobre exaltado!

añadiendo mas detalles para que en un futuro puedas manejarte correctmente. como decia, quizas tu confusion se debe por alguna costumbre de ver funciones donde recibe como argumento el objeto evento y éste esta nombrado como e. un ejemplo que quizas te ayude a entenderlo.
Código:
// Event Model 0;
<input type="button" value="click me" onclick="alert(event);" />
este ejemplo funciona tanto en iexplorer como en navegadores estandar. los listener no son otra cosa que funciones. en los navegadores estandar, cuando un listener captura un evento, el navegador le pasa el objeto que contiene la informacion acerca del evento como si fuera un parametro pasado a una funcion. sin embargo, iexplorer no se comporta asi porque tiene su propio modelo. la unica razon por la que el codigo anterior funciona en iexplorer es porque el navegador crea la variable global event el cual tiene el mismo proposito que el objeto event de los navegadores estandar, proveer informacion acerca del evento ocurrido.

el mismo codigo anterior pero con modificaciones leves.
Código:
<input type="button" value="click me" onclick="alert('numero de argumentos: ' + arguments.length + '\ntipo de evento: ' + arguments[0].type);" />
fijate que esta vez he cambiado event por arguments[0]. arguments es un objeto de las funciones que contiene todos los argumentos pasado a la funcion cuando fue invocado. si compruebas el ejemplo en iexplorer no te va a funcionar, de nuevo por no seguir el mismo modelo.

ahora bien, la posible forma en que probablemente estas acostumbrado verlo.
Código:
<script>
function clickme(e){
alert('numero de argumentos: ' + arguments.length + '\ntipo de evento: ' + 
e.type // solo como muestra, aqui utilizo el argumento e;
);
}
document.onclick = clickme; // se asigna la funcion como manejador del listener;
</script>
es practicamente lo mismo como los ejemplos anteriores, salvo que en lugar de definir el manejador como atributo HTML se define como propiedad en javascript. de nuevo sucede que en iexplorer no funciona por la misma razon. el punto que quiero demostrar es que e es un argumento de la funcion que recibe el objeto event porque el navegador automaticamente se lo pasa. por supuesto, aqui hablo de navegadores con el modelo estandar. quizas de aqui es donde viene tu confusion.

para hacerlo funcionar en iexplorer habria que crear una funcion anonima que invoque la funcion pasando como parametro el objeto event.
Código:
<script>
function clickme(e){
alert('numero de argumentos: ' + arguments.length + '\ntipo de evento: ' + 
e.type // solo como muestra, aqui utilizo el argumento e;
);
}
document.onclick = function(){
clickme(event);
}
</script>
aunque funciona en iexplorer, deja de funcionar en los demas navegador. la razon es simple, event (en el codigo anterior) no es una variable o argumento definida en la funcion. recuerda que en el modelo estandar el objeto evento es pasado a la funcion, por lo que el objeto existe en arguments. para hacerlo funcionar en todos los navegadores hay que pasarle un valor u otro.
Código:
<script>
function clickme(e){
alert('numero de argumentos: ' + arguments.length + '\ntipo de evento: ' + e.type);
}
document.onclick = function(){
clickme(arguments[0] || event);
}
</script>
o bien podrias darle un nombre al argumento para no usar arguments.
Código:
<script>
function clickme(e){
alert('numero de argumentos: ' + arguments.length + '\ntipo de evento: ' + e.type);
}
document.onclick = function(e){
clickme(e || event);
}
</script>
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 20/01/2010 a las 18:26