2015-08-12 5 views
1

Я использую следующий код.JQuery, почему мой слушатель mousemove не пройдет объект события?

var cursorXPos; 
var cursorYPos; 

$(document).mousemove(cursorLocation(evt)); 

function cursorLocation (evt) { 
cursorXPos = evt.pageX; 
cursorYPos = evt.pageY; 
} 

Но это дает мне ошибку.

Uncaught TypeError: Cannot read property pageX of undefined.

Однако, если я использую анонимную функцию, объект события передается, и все работает нормально.

$(document).mousemove(function (evt) { 
cursorXPos = evt.pageX; 
cursorYPos = evt.pageY; 
}); 
+0

Первый фрагмент выполняет 'cursorLocation', а затем использует его возвращаемое значение как ссылку на обработчик фактического события. Вы ничего не возвращаете, поэтому ссылка будет 'undefined'. – Teemu

ответ

2

Вы не можете передать параметр в функции при привязке события. Вы просто передаете имя события, а javascript обрабатывает параметры для вас.

var cursorXPos; 
var cursorYPos; 

$(document).mousemove(cursorLocation); // <-- here 

function cursorLocation (evt) { 
    cursorXPos = evt.pageX; 
    cursorYPos = evt.pageY; 
} 
+0

@ arun-p-johny Спасибо за помощь. Теперь работает. Мне интересно, что произойдет, если функция имеет более одного параметра, как javascript знает, какой параметр передать объект события? – irishjauntingcar

+0

Если вы имеете в виду функции, используемые в jQuery-событиях, например, jQuery обрабатывает распространение события на указанную вами функцию, поэтому они (почти) всегда предоставляют параметры '(event, ui)' при каждом вызове. Вы также можете определить свои методы с пользовательскими именами типа '(foo, bar)', в этом случае 'foo' будет просто параметром' event' с другим именем. – Loyalar

+0

Скажите, что у моего метода есть параметры (foo, bar, name). Я предполагаю событие, и ui всегда являются первыми объектами, которые будут переданы обработчиком событий, поэтому они будут занимать foo и bar. Но как бы передать объект имени? – irishjauntingcar

3

Вы должны передать ссылку на функцию mousemove, не вызывать его (путем добавления ())

$(document).mousemove(cursorLocation); 
+0

Черт, избил меня на 20 секунд :) – Loyalar

 Смежные вопросы

  • Нет связанных вопросов^_^