![Antiguo](http://static.forosdelweb.com/fdwtheme/images/statusicon/post_old.gif)
09/04/2006, 17:53
|
| | 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 |