Hola el_javi, tunait y flaviovich.
Estoy totalmente de acuerdo con tunait, es mas sencillo utilizar funciones literales, si prefieres utilizar attachEvent y addEventListener, también deberás utilizar detachEvent y removeEventListener, ya que una vez asignado una función a un evento debes ante eliminar el evento para asignarle otra función.
Te envío un ejemplo para que veas que es más laborioso.
Código PHP:
<html>
<head>
<title>Manejadores de eventos</title>
</head>
<body>
<form name="form1" id="form1" style="display:none;">BUSCADOR<br>
<input type="text" size="50">
</form>
<div id="test">ABRIR</div>
<script language="JavaScript" type="text/javascript">
<!--
//-------------- Funciones de eventos ---------------------
function addEvent(obj, evType, fn, useCapture){
if (obj.addEventListener){
obj.addEventListener(evType, fn, useCapture);
return true;
} else if (obj.attachEvent){
var r = obj.attachEvent("on"+evType, fn);
return r;
} else {
alert("Handler could not be attached");
}
}
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");
}
}
//-------------------------------------------------------
var handler_obj = document.getElementById("form1");
// funciones que enviamos como argumento a addEvent
// las guardamos en las variables func_open y func_close
var func_open = (function(event){
if(event.target){event.stopPropagation()}
else if(event.srcElement){event.returnValue = false;}
abrir(event,handler_obj);})
var func_close = (function(event){
if(event.target){event.stopPropagation()}
else if(event.srcElement){event.returnValue = false;}
cerrar(event,handler_obj);})
function abrir(e,obj){
var objeto_buscador = e.target ? e.target : e.srcElement ;
objeto_buscador.innerHTML = "CERRAR";
obj.style.display = "inline";
removeEvent(objeto_buscador ,"click",func_open ,false);
addEvent(objeto_buscador ,"click",func_close,false);
}
function cerrar(e,obj){
var objeto_buscador = e.target ? e.target : e.srcElement ;
objeto_buscador.innerHTML = "ABRIR";
obj.style.display = "none";
removeEvent(objeto_buscador,"click",func_close,false);
addEvent(objeto_buscador,"click",func_open,false);
}
addEvent(document.getElementById("test"),"click",func_open,false);
//-->
</script>
</body>
</html>
Saludos