Вы должны заглянуть в замыкания .
Попробуйте следующий код:
makeDraggable : function() {
// create new draggable
for (var i = 0, l = fSel.sI.length, sI = fSel.sI; i < l; i++) {
var mydrag = sI[i];
(function(mydrag) {
$("#" + mydrag).draggable({
cancel: [''],
distance: 5,
containment: "#fWorkspace",
handle: mydrag,
start: function() { dragRegister(mydrag); },
drag: function() { dragItems(mydrag); },
stop: function() { dragStop(mydrag); }
});
})(mydrag);
}
},
Ваша проблема связана с функциями start
, drag
и stop
. Они не исполняются немедленно; к тому времени, когда они это сделают, mydrag
будет установлено другое значение. Оборачивая самовыполняющуюся функцию вокруг блока кода, содержащего эти функции, мы создаем замыкание, где mydrag
не изменяется.
Примечание: Из соображений производительности при доступе к свойствам объекта более одного раза лучше создать переменную, которая ссылается (или содержит) свойство. В вашем цикле for
я создал две переменные l
и sI
, в которых хранятся fSel.sI.length
и fSel.sI
(соответственно), поэтому JavaScript не должен искать sI
и length
свойства каждый раз вокруг цикла.