Tenés algunas cosas mal, aparte de lo que mencionás. Cuando usás los eventos como método (ejemplo, lo que usás en window.onload) el intérprete espera una referencia a una función a ejecutar. Es decir, espera o bien un nombre de función sin paréntesis o una función anónima. Vos usaste una instrucción y eso está mal.
Lo otro, lo que mencionás de this y explorer, es así cómo se maneja explorer. Para explorer ese this, usado en ese contexto, apunta al objeto window y no al objeto sobre el cual se produce el evento. Hay varias maneras de solucionarlo. Te dejo un ejemplo:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>
<script>
function addEvent(obj,fun,type){
if(obj.addEventListener){
obj.addEventListener(type,fun,false);
}else if(obj.attachEvent){
var f=function(){
fun.call(obj,window.event);
}
obj.attachEvent('on'+type,f);
obj[fun.toString()+type]=f;
}else{
obj['on'+type]=fun;
}
}
function prueba() {
var texto = this.value;
alert(texto);
}
window.onload =function(){addEvent(document.getElementsByTagName("input")[0],prueba,'keyup');};
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<input name="textfield" type="text" id="textfield" value="hola" />
</form>
</body>
</html>