Я работаю над созданием виджета, который вызывает определенный плагин для каждого элемента DOM jQuery внутри массива.Общая проблема с закрытием JavaScript в элементах jQuery в массиве
MyApp.forms - это массив объектов. Каждый объект имеет элемент DOM, обернутый jQuery.
Я делаю следующее:
$(MyApp.forms).each(function(i){
var individualForm = this;
/*
individualForm is an Object {
prop: 'value,
$el: somejQueryElement,
...
}
*/
individualForm.$el.thePlugin({
// options
})
.on('pluginEvent', function() {
individualForm; // refers to the last object in MyApp.forms
this; // refers to the last
$(this); // same problem
}).on('pluginEvent2', function() {
// same problem as above here.
});
});
pluginEvent
События и pluginEvent2
привязываться ко всем individualForm
«s $el
. Но когда они стреляют, я всегда получаю последний элемент.
Я чувствую, что это общая проблема с закрытием JavaScript.
Я попытался использовать цикл for
и создать внутри него IIFE
, но он не работает, поскольку функция выполняется при срабатывании события. И хотя оба события срабатывают по всем элементам, я получаю только обработчик, прикрепленный к последнему выполняемому элементу.
Update:
Найдено затруднительное положение. Но не знаю, почему и как это сработало. Элемент individualForm.$el
является элементом input
с class="some-class"
.
В другом месте кода другой разработчик делает $('.some-class').bind(...
со старой версией jQuery. И снова с новой версией jQuery (с использованием noConflict
$
). На странице есть 2 jQuery
. Исправлено удаление первого .bind
.
Я сделал простую демонстрационную версию с вашей структурой здесь http://jsfiddle.net/v9hWB/ и, похоже, работает нормально –
@koala_dev, да :(. Я обновил вопрос, если это помогает. Я также использую плагин перед привязкой событий –
Что-то еще должно быть неправильным. Вы уверены, что 'individualForm' является локальным для обратного вызова' each'? Вы случайно устанавливаете 'individualForm. $ el' для каждого объекта одному элементу? –