Foros del Web » Programando para Internet » Javascript »

añadir varios eventos a la vez

Estas en el tema de añadir varios eventos a la vez en el foro de Javascript en Foros del Web. Hola, estoy teniendo problemas al intentar añadir varios eventos a la vez mediente un bucle for. El evento es añadir a un enlace el evento ...
  #1 (permalink)  
Antiguo 18/11/2009, 14:19
 
Fecha de Ingreso: diciembre-2005
Mensajes: 92
Antigüedad: 18 años, 4 meses
Puntos: 0
añadir varios eventos a la vez

Hola, estoy teniendo problemas al intentar añadir varios eventos a la vez mediente un bucle for. El evento es añadir a un enlace el evento onclick para que me abra una ventana nueva y cargue en esa ventana un archivo pdf.

Esto me funciona correctamente:
Código:
// en eManualSep esta una cadena de texto donde van por parejas el nombre del elemento1 y la ruta del archivo que hay que abrir.
//seria asi elemento1--rutaelemento1--elemento2--rutaelemento2...
//tras el split seria eManualSep[0]=elemento1, eManualSep[1]=rutaelemento1...

var eManualSep = eManual.split('--');
this.nuevo_evento(document.getElementById('manual_'+eManualSep[0]), 'click', function(){window.open(eManualSep[1],'ventanaDatos','width=450,height=500')});
this.nuevo_evento(document.getElementById('manual_'+eManualSep[2]), 'click', function(){window.open(eManualSep[3],'ventanaDatos','width=450,height=500')});
this.nuevo_evento(document.getElementById('manual_'+eManualSep[3]), 'click', function(){window.open(eManualSep[5],'ventanaDatos','width=450,height=500')});
osea si hago lo que quiero por separado me asigna los enlaces perfectamente y me abre las ventanas con susarchivos pdf perfectamente pero si lo intento hacer con un bucle for que es lo suyo porque la longitud del array eManualSep va a ser variable me da errores, por ejemplo tal cual pongo el siguiente codigo me habilita todos los enlaces que abren el archivo del ultimo elemento del array.
En caso de que sean 3 elementos los del array, el enlace1 me abre el archivo3, el enlace2 me abre el archivo 3 y el enlace 3 me abre el 3 tb y no veo el porque.

Código:
//el array va opr parejas 0-1,2-3.... que son elemento1-rutaelemento1,elemento2-rutaelemento2..... de ahi que  ponga la variable l
var eManualSep = eManual.split('--');
			var l=0;
			for	(var r=0;r<=((eManualSep.length/2)-1);r++) {
				var zp= l+1;
this.nuevo_evento(document.getElementById('manual_'+eManualSep[l]), 'click', function(){window.open(eManualSep[zp],'ventanaDatos','width=450,height=500')});
			l=l+2;
			}
Alguna idea porque lo veo tan simple y no me funciona que estoy ofuscado.

Funcion que añade los eventos:

this.nuevo_evento= function(elemento, evento, funcion){
if (elemento.addEventListener) {
elemento.addEventListener(evento, funcion, false);
} else {
elemento.attachEvent("on"+evento, funcion);
}
}

Un salu2.

Última edición por pepepercebe; 18/11/2009 a las 15:12 Razón: Falta la funcion que añade los eventos
  #2 (permalink)  
Antiguo 18/11/2009, 18:07
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: añadir varios eventos a la vez

de momento voy a dejar a un lado tu codigo para darte otra alternativa. se entiende que estas agregando el evento a varios elementos que tienen algo en comun. ¿que tal si en lugar de agregar el evento a cada elemento realizas un solo listener para todos los enlaces? por supuesto, requiere que tu enlaces apunten a los documentos pdf pero de esta forma te evitas practicamente dos o tres pasos: el bucle, el array con las direcciones.
Código:
document.onclick = function(evt){
var evt = evt || event, elem = evt.target || evt.srcElement; // DOM || IE;
if(!(/^a$/i.test(elem.nodeName) && /\.pdf$/i.test(elem.href)))return;
self.open(elem.href, "ventanaDatos", "width=450,height=500");
return false;
}
la funcion verifica si el evento fue activado en un enlace y éste tiene como ruta un documento pdf. no es necesario que lo agregues al objeto document, puede ser a un elemento en particular, como por ejemplo un elemento que contenga todos los enlaces pdf. si no te sirve, pues nada, trabajamos con tu codigo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 19/11/2009, 04:07
 
Fecha de Ingreso: diciembre-2005
Mensajes: 92
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: añadir varios eventos a la vez

Gracias Zerokilled, estoy intentando entender tu codigo, ten encuenta que mas bien se poco...

Dos temas de programacion de los que menos se son expresiones regulares y eventos, y tu codigo rebosa de ellos por los dos lados aunque me gusta ver cosas nuevas porque asi aprendo y de eso se trata. Pero por mas que lo veo no lo entiendo, asi que esta noche me pondre con el a ver si logro comprenderlo.

Gracias.
  #4 (permalink)  
Antiguo 19/11/2009, 04:23
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: añadir varios eventos a la vez

estudialo. quizas este capitulo tambien te sea util, http://www.librosweb.es/javascript/capitulo6.html. si aun asi te quedan dudas, nada mas consultalo en este mismo tema.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
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 14:21.