Foros del Web » Programando para Internet » Javascript »

event, una duda

Estas en el tema de event, una duda en el foro de Javascript en Foros del Web. Antes que nada un fuerte abrazo a todos los integrantes del foro de Javascript, vengo de visita de aquí aladito (PHP) . Hace unos días ...
  #1 (permalink)  
Antiguo 01/10/2008, 18:35
Avatar de WyLY  
Fecha de Ingreso: enero-2002
Ubicación: Cancun, México.
Mensajes: 506
Antigüedad: 23 años
Puntos: 6
Pregunta event, una duda

Antes que nada un fuerte abrazo a todos los integrantes del foro de Javascript, vengo de visita de aquí aladito (PHP) .

Hace unos días vengo trabajando en una aplicación para subir multiples archivos, donde me basé de:
http://www.buayacorp.com/archivos/en...-estilo-gmail/

con php no hay problema y con parte del DOM tampoco, pero tengo unas dudas de funcionamiento

aquí va:

Código:
// en esto cae mi duda, pero primero me explico

e = function (evt) { // Retorna el evento
   return (!evt) ? event : evt;
}
f = function (evt) { // Retorna el objeto que genera el evento
   return evt.srcElement ?  evt.srcElement : evt.target;
}

//La funcion
removeField = function (evt) {
   lnk = f(e(evt));
   span = d(lnk.name);
   span.parentNode.removeChild(span);
}
entiendo que la f() retorna la FUENTE que hace el evento, quiero entender (profavor corrijanme si estoy mal) que el evneto onclick acciona removeField con f() encuentra la fuente para luego buscar el nombre y así remove el Child, mi duda recae EN ESTO: lnk = f(e(evt)); en especial e(evt), básicamente no entiendo la linea:

e = function (evt) {
return (!evt) ? event : evt;

¿Retorna evento?, ¡cual?, si me dieran un link para leer se los agradecería mucho, yo sé que muchos me van a decir ¿no sabes que es un evento?, les responde: sí y no, entiendo lo qué son los eventos lo que no entiendo es el manejo que se le ha dado en este script mi hamster en mi cabeza dice que no entiende como funciona f(e(evt))

Ya desde ahora MUUUUUUCHAS GRACIAS.
__________________
I do techy stuff for a living and practice MMA with my dog... He always wins.
  #2 (permalink)  
Antiguo 01/10/2008, 23:57
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 18 años, 2 meses
Puntos: 122
Respuesta: event, una duda

Ese es uno de los problemas a los que me refiero cuando digo que los alias no siempre son la mejor opcion. Los que rondan este foro saben a lo que me refiero. Lo que esta haciendo la linea es pasar una referncia al evento como tal para poder localizar al elemento que hizo que el evento se produgera. Lo se, complicado, pero es complicado por que no se exactamente como explicarlo, seguro que alguna vez te ha pasado que sabes exactamente lo que algo hace pero no sabes como explicarlo? De cualquier modo me parece redundante ya que lo mismo se pudo lograr con menos lineas....
__________________
twitter: @imbuzu
  #3 (permalink)  
Antiguo 01/10/2008, 23:58
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 18 años, 2 meses
Puntos: 122
Respuesta: event, una duda

hey tu vives en Cancu... vas a ir al mexico web 2.0? Lo siento, no me pude resistir....
__________________
twitter: @imbuzu
  #4 (permalink)  
Antiguo 02/10/2008, 09:56
Avatar de WyLY  
Fecha de Ingreso: enero-2002
Ubicación: Cancun, México.
Mensajes: 506
Antigüedad: 23 años
Puntos: 6
De acuerdo Respuesta: event, una duda

Hola Buzu antes que nada muchas gracias por responder.
Sí sí me ha pasado por lo que no entiendo ¿Hay algún link oara que pueda entender mejor lo que me tratas de explicar?.

Y claro que voy a ir al evento.

Un abrazo
__________________
I do techy stuff for a living and practice MMA with my dog... He always wins.
  #5 (permalink)  
Antiguo 02/10/2008, 12:44
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 18 años, 2 meses
Puntos: 122
Respuesta: event, una duda

Que envidia, yo quiero ir pero estoy atorado en LA. Bueno, siguiendo con lo de tu tema, no conosco un lugar donde se te pueda explicar ese asunto... Pero trataré de explicarte un poco mejor. PAra ello requeriré todo el código así que aquí está:

Código javascript:
Ver original
  1. <script type="text/javascript">
  2. var numero = 0;
  3.  
  4. // Funciones comunes
  5. c= function (tag) { // Crea un elemento
  6.    return document.createElement(tag);
  7. }
  8. d = function (id) { // Retorna un elemento en base al id
  9.    return document.getElementById(id);
  10. }
  11. e = function (evt) { // Retorna el evento
  12.    return (!evt) ? event : evt;
  13. }
  14. f = function (evt) { // Retorna el objeto que genera el evento
  15.    return evt.srcElement ?  evt.srcElement : evt.target;
  16. }
  17.  
  18. addField = function () {
  19.    container = d('files');
  20.    
  21.    span = c('SPAN');
  22.    span.className = 'file';
  23.    span.id = 'file' + (++numero);
  24.  
  25.    field = c('INPUT');  
  26.    field.name = 'archivos[]';
  27.    field.type = 'file';
  28.    
  29.    a = c('A');
  30.    a.name = span.id;
  31.    a.href = '#';
  32.    a.onclick = removeField;
  33.    a.innerHTML = 'Quitar';
  34.  
  35.    span.appendChild(field);
  36.    span.appendChild(a);
  37.    container.appendChild(span);
  38. }
  39. removeField = function (evt) {
  40.    lnk = f(e(evt));
  41.    span = d(lnk.name);
  42.    span.parentNode.removeChild(span);
  43. }
  44. </script>


La linea en la que tienes la duda es :

lnk = f(e(evt));

Ok, Hay algunas cosas sencillas pasando ahi.

1 se ejecuta la función e con un parámetro evt.
La función e es un alias de "e" o lo que es similar a function(e){}
Esta función lo único que hace es retornar una referencia al evento (un objeto). Pero que rayos es el evento? Bueno, es "algo" (un objeto según se) que guarda información sobre lo que ha pasado, razón por la cual podemos saber que elemento fue presionado. El parámetro de esta función (e) es una referencia a ese objeto evento el cual guarda información sobre lo que está pasando.

Esa función de la que hablé hace un momento no hace otra cosa que regresar una referencia al objeto evento. De modo que en realidad no es necesario usar esa función ya que podemos hacer referencia al objeto evento directamente. Con la funcio f pasa algo similar. Lo unico que hace esa funcion f es recoger la referencia al objeto evento y le "saca" su valor srcElement o target según se use IE u otro navegador. Esto es por que IE implementa el objeto evento en forma distinta a los otros navegadores.

Pero que rayos es el srcElement? Es una referencia al elemento (HTML) que inició el evento, de modo que si tengo un enlace con id="miEnlace" y hago click en ese enlace, entonces srcElement/target hace referencia a miEnlace. De ahí que puedas hacer referencia al padre de miEnlace y eliminar miEnlace.

El mismo efecto se podria lograr pasando como parametro this a la funcion removeField ya que la palabra this hace referencia al objeto que fue presionado. Demodo que podrias cambiar esto:

Código javascript:
Ver original
  1. removeField = function (evt) {
  2.    lnk = f(e(evt));
  3.    span = d(lnk.name);
  4.    span.parentNode.removeChild(span);
  5. }

por:

Código javascript:
Ver original
  1. removeField = function(cual){
  2.         cual.parentNode.removeChild(cual);
  3. }

Y por lo menos en teoria debe funcionar.

fijate en este ejemplo:

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
	<meta http-equiv="content-type" content="text/html; charset=iso-2022-jp" />
	<title>badura</title>
	<script type="text/javascript">
		removeField = function(cual){
     		     cual.parentNode.removeChild(cual);
		}
	</script>
</head>
<body>
<p>Este texto debe permancer pero <a href="#nogo" onclick="removeField(this)">Este se debe borrar</a> Este se queda</p>
</body>
</html> 
__________________
twitter: @imbuzu
  #6 (permalink)  
Antiguo 02/10/2008, 19:06
Avatar de WyLY  
Fecha de Ingreso: enero-2002
Ubicación: Cancun, México.
Mensajes: 506
Antigüedad: 23 años
Puntos: 6
De acuerdo Respuesta: event, una duda


Muchas gracias buzu no sabes como me has ayudado sobre todo con la explicación de this, practicaré un poco más y así aislar toda duda.
Te agradezco de nuevo y si deseas venir a Cancún en último instante con toda confianza enviame un correo y así ya cuentas con un miniguia hehehe, un abrazote.
__________________
I do techy stuff for a living and practice MMA with my dog... He always wins.
  #7 (permalink)  
Antiguo 02/10/2008, 22:00
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 18 años, 2 meses
Puntos: 122
Respuesta: event, una duda

Gracias por el ofrecimiento! Y ya sabes vecino, aca en JS estamos dispuestos a ayudar en todo momento...
__________________
twitter: @imbuzu
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:40.