div.addEventListener("mousemove", function(){test(event, this)}, true);
Ну, конечно, вы получите "событие не определено"!Когда срабатывает событие mousemove
, вызывается ваш обработчик события:
function(){test(event, this)}
Существует два способа добраться до объекта информации о событии.Либо он передается обработчику события в качестве аргумента, либо он может быть найден в window.event
.
Предположим, что второй случай имеет место.Поскольку в вашей функции нет локальной переменной с именем event
, а в function1
нет такой переменной, которая ее вызывает, браузер проверяет, есть ли в глобальном объекте event
, определенный в глобальном объекте.В JavaScript глобальный объект называется window
, поэтому ваша функция интерпретируется как
function(){test(window.event, this)}
, и она работает.
Однако, как я уже отмечал ранее, в некоторых браузерах событиеинформация передается в аргументе.Так что ваш обработчик событий, вероятно, хотел выглядеть так:
function(event){test(event, this)}
, иначе event
, переданный test()
, будет неопределенным.Итак, вот как сделать кросс-браузерный обработчик:
function(event) {
if (!event) // i.e. the argument is undefined or null
event = window.event;
test(event, this);
}
Вторая проблема заключается в том, что addEventListener()
не работает в старых IE (хотя в IE9 это работает).Для более старых IE вы должны использовать аналогичную функцию под названием attachEvent()
.Или, если вы подключаете только один обработчик, вы можете сделать это простым способом
div.onmousemove = function() {...};