Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/04/2006, 17:53
kepawe
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 20 años, 5 meses
Puntos: 5
Hola Patomas

Basándome en los script de Scott Andrew LePera, en este enlace encontraras los script y una explicación de ellos.
Lo he modificado para que envíe los argumentos como has indicado anteriormente, para esto he utilizado básicamente el método apply().

Bueno, hay te pongo un ejemplo:

Código:
<html>
<head>
<title>Manejadores de eventos</title>
</head>
<body>
<div id="test">Event1</div>
<div id="test1">Event2</div>
<div id="remove">Eliminar eventos</div>
<script language="JavaScript" type="text/javascript">
<!--
function funcion(event,str,n){

   alert(this.id + "\n" + event.type + "\n" + str)
 
   if(typeof(arguments[2]) != "undefined") {alert(arguments[2]+ " = " + n)}
}
function removeEvent(obj, evType, fn, useCapture){
  if (obj.removeEventListener){
    obj.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.detachEvent){
    var r = obj.detachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}
function addEvent(obj, evType, fn, useCapture,args){

 // Esta función almacena en this el  objeto que desencadena el evento, y como
 // primer argumento el evento, después el resto de los argumentos, formados por los elementos del
 //array, si es necesario enviar más argumentos
 
  var fnc = (function(event){fn.apply(obj,[event].concat(args))});
  
  if (obj.addEventListener){
    obj.addEventListener(evType,fnc, useCapture);
  } 
  else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType,fnc );
  } 
  else {
    alert("Handler could not be attached");
  }
  // devolvemos la funcion creada, servira más tarde para poder eliminar el evento, 
  // es necesario, de otra manera, no se podría eliminar el evento
  return fnc;
}

/*
   addEvent(
   @param object ,
   @param string,
   @param function,
   @param boolean,
   @param array,
   )
*/
var ref1 = addEvent(document.getElementById("test"),"click",funcion,false,["String1",2]);
var ref2 = addEvent(document.getElementById("test1"),"click",funcion,false,["String2"]);

/*
   removeEvent(
   @param object ,
   @param string,
   @param function, 
   @param boolean,
   )
*/
document.getElementById("remove").onclick = function(){
    removeEvent(document.getElementById("test"),"click",ref1,false);
    removeEvent(document.getElementById("test1"),"click",ref2,false);
}
//-->
</script>

</body>
</html>
Como podrás observar, también es posible enviar más argumentos.

Saludos