buenas...
sobre la primera cuestion, sucede que estas leyendo del objeto event desde el lugar incorrecto. o sea, en el modelo estandar, dicho objeto se recibe como un argumento en el handler (handler, la funcion registrada al evento). el modelo que estas usando es propio de iexplorer. el hecho que te funcione en chrome supongo que es simplemente como medida de compatibilidad, por supuesto, de parte de google. por eso en firefox no te funciona. ¿que debes hacer? al invocar la funcion
a le pasas como parametro el objeto
event. no estoy seguro si es estandar pero segun la documentacion que he leido, el argumento recibido en la funcion del handler automaticamente recibe el nombre
event. iexplorer, aunque no sigue este modelo, recibira como argumento el objeto
event definido en el ambito global (
window) por lo que no debe dar problema al utilizar el nombre
event cuando invoques la funcion
a. luego, en tu funcion
a, debes definir un parametro para poder hacer uso del objeto
event y desde ese paremtro lees las propiedades de interes.
sobre el segundo asunto, el evento lo puedes registrar practicamente sobre cualquier elemento. mientras mas alto en la jerarquia, mas efecto tendra en el documento completo. o sea, si lo registras en <body>, el evento se producira en cualquier parte que se encuentre el usuario.
edit: me gano cronos! ademas de que tarde mucho en escribir.