buenas,
no te recomiendo utilizar setAttribute para asignar un evento a un elemento. principalmente porque hay navegadores que no admiten el agregado de esa forma, por ejemplo iexplorer -aunque desconozco si enlas últimas versiones funciona. lo más adecuado sería que utilices DOM Level 0 o DOM Level 2. el primero simplemente consiste en tratar el evento como una propiedad del elemento. es decir, element.onclick es el evento onclick. solo tienes que asignarle una función.
Código:
element.onclick = fn;
// si la funcion no requiere parámetros;
element.onclick = funciton(){fn(/*parameters*/);};
// si la función requiere parámetros, se crea una función anónima y dentro se invoca la función;
la segunda forma es con la función que mencionas. attachEvent, pero dicha función es el modelo que utiliza iexplorer, el cual no es estandar. la versión estandar es addEventListener.
Código:
if(self.addEventListener) element.addEventListener('click', fn, false);
else element.attachEvent('onclick', fn);
// de forma similar al anterior, puedes crear una función anónima si la función original requiere parámetros;