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<script type="text/javascript">
var numero = 0;
// Funciones comunes
c= function (tag) { // Crea un elemento
return document.createElement(tag);
}
d = function (id) { // Retorna un elemento en base al id
return document.getElementById(id);
}
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;
}
addField = function () {
container = d('files');
span = c('SPAN');
span.className = 'file';
span.id = 'file' + (++numero);
field = c('INPUT');
field.name = 'archivos[]';
field.type = 'file';
a = c('A');
a.name = span.id;
a.href = '#';
a.onclick = removeField;
a.innerHTML = 'Quitar';
span.appendChild(field);
span.appendChild(a);
container.appendChild(span);
}
removeField = function (evt) {
lnk = f(e(evt));
span = d(lnk.name);
span.parentNode.removeChild(span);
}
</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 originalremoveField = function (evt) {
lnk = f(e(evt));
span = d(lnk.name);
span.parentNode.removeChild(span);
}
por:
Código javascript
:
Ver originalremoveField = function(cual){
cual.parentNode.removeChild(cual);
}
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>