2013-06-26 3 views
0

Основной вопрос: у меня есть функция с несколькими аргументами. Как я могу получить позицию мыши внутри этой функции? Вот какой-то код, чтобы прояснить, что я имею в виду.Получить позицию мыши в функции с дополнительными аргументами

$(element).on("mousedown",checkDragDropEdit); 

function checkDragDropEdit() { 
    if($('.editing').length > 0) { 
     $('.editing').css('border','3px solid red'); 
     return 
    } else { 
     var oldMousePos = checkMousePos(); 
     $(this).bind("mouseup",function(e) { 
      var newMousePos = [e.pageX,e.pageY]; 
      if(oldMousePos[0] == newMousePos[0] && oldMousePos[1] == newMousePos[1]) { 
       //makeEditable($(this)); 
       edit($(this)); 
       $(this).off("mousedown",checkDragDropEdit); 
      } 
      $(this).unbind("mouseup"); 
     }); 
    } 
} 

function checkMousePos(e) { 
    return [e.pageX,e.pageY]; 
} 

Это не работает, функция возвращает «неперехваченный TypeError: Не удается прочитать свойство„pageX“неопределенный».

В то время как, если я обменять часть в функции «checkDragDropEdit» к этому, я могу получить координаты:

function checkDragDropEdit(e) { 
    ... 
    var oldMousePos = [e.pageX,e.pageY]; 
    ... 
} 

Может кто-нибудь объяснить мне, почему функции ведут себя, как это и как я могу правильно извлечь положение мыши внутри верхней функции? Причина в том, что я хотел бы передать больше аргументов этой функции, но все же могу получить позицию мыши после ее выполнения.

спасибо

ответ

1

Именно из-за этой линии

var oldMousePos = checkMousePos(); 

function checkMousePos(e) { 
    return [e.pageX,e.pageY]; 
} 

Он читает позицию, основанную на Event объекта. Но это простой вызов функции.

Передайте объект события метода

function checkDragDropEdit(e) { 

    ... // Pass the event object 
    var oldMousePos = checkMousePos(e); 
+0

Спасибо большое ... Я должен был читать немного больше на объект события - я был совершенно неправильно, как это работает, и как она передается вместе. Спасибо Sushanth. – tricon

+0

Могу я попросить еще одну вещь? Я не могу разобраться в одном: почему это не работает: function checkDragDropEdit (e) {(function (e) {console.log (e)})(); } но это: функция checkDragDropEdit (e) {var oldMousePos = mousePos (e); function mousePos (e) {console.log (e)}} Извините за эти основные вопросы;) – tricon

+0

Это так логично ... спасибо тонну! – tricon