Этот код:
document.getElementById("foo").onfocus = alert("foo");
присваивает результат вызова alert () свойству onfocus.То, что вы имели в виду:
document.getElementById("foo").onfocus = function(){ alert("foo"); };
Это использует модель событий DOM уровня 0, где вы можете иметь только один обработчик для каждого события.Если вы хотите что-то более гибкое, но все же кроссплатформенное, то вы можете попробовать какую-то библиотеку для абстрагирования модели событий для вас, как это делает jQuery:
$('#foo').focus(function(){ alert("foo"); });
Таким образом, вам не нужно беспокоиться о attachEvent в IEпо сравнению с addEventListener во всем остальном, но если вам нужен только простой случай, как в вашем примере, тогда модель уровня 0 отлично работает и работает во всех браузерах.