2015-07-05 2 views
0

Так что я делаю перетаскивание. Когда пользователь захватывает элемент, мне нужно добавить прослушиватель событий для dragenter к каждому элементу. В этой функции слушателя мне нужно это, чтобы получить и сохранить clientX, когда мышь перемещается по этому элементу. Проблема, с которой я столкнулась, - это получить позицию мыши первого элемента и сохранить один и тот же для каждого другого элемента. Как я могу это исправить?Добавить функцию для каждого элемента, который получает clientX

Код:

if(editor_children[i].nodeType != 3) 
    { 
     editor_children[i].addEventListener("dragenter", function(event){ 
      if(event.target.id !== e.target.id) event.target.className= event.target.className + " highlight"; 
      position= event.clientX; 
      last_over= event.target.id; 
      console.log("Mouse: " + e.clientX + " Position: " + position + " Last Element: " + last_over); 
     }) 

     editor_children[i].addEventListener("dragleave", function(event){ 
      event.target.className= event.target.className.replace(' highlight', ''); 
     }); 
    } 

Пожалуйста, не библиотеки JS.

+0

На первый взгляд, может быть, потому, что вы используете одну и ту же переменную (переменную положения) для хранения каждой позиции каждого элемента? Вы также сильно усложняете себя. Просто выполняйте функцию (e) {e = e || event; и использовать e для всего. – tomysshadow

+0

Переменная position - глобальная (да, я знаю, плохое кодирование). Необходимо исправление позже), необходимое для функции drop. Я нашел проблемы, хотя, спасибо. – Zaper127

ответ

0

Вот почему я не большой поклонник JavaScript. в любом случае проблема была вызвана тем, что я создал функцию внутри цикла, поэтому она использовала одно и то же значение каждый раз вместо значения переменной. Я только что узнал об этом, запустив его, бросил JShint. Также мне пришлось очистить функции между вызовами перетаскивания, чтобы избежать проблем с сохраненными данными. Трудно объяснить, но я понял.