Цель
Я хочу динамически назначать обработчики событий некоторым элементам div на страницах сайта.
Мой метод
Я использую jQuery для привязки анонимных функций в качестве обработчиков для выбранных событий div.
Проблема
Код повторяет массив имен div и связанных URL. Имя div используется для установки цели привязки, то есть присоединяет этот обработчик события к этому событию div.
Хотя обработчики событий успешно связаны с каждым из событий div, действия, запускаемые этими обработчиками событий, только когда-либо предназначаются для последнего элемента в массиве.
Таким образом, идея заключается в том, что если пользователь наводит мышью на заданный элемент div, он должен запустить анимацию выдвижения для этого элемента div. Но вместо этого при наведении мыши на div1 (rangeTabAll) запускается анимация выдвижения для div4 (rangeTabThm). То же самое верно для div 2, 3 и т. Д. Порядок не имеет значения. Измените элементы массива вокруг, и события всегда будут нацелены на последний элемент в массиве, div4.
Мой код - (использует jQuery)
var curTab, curDiv;
var inlineRangeNavUrls=[['rangeTabAll','range_all.html'],['rangeTabRem','range_remedial.html'],
['rangeTabGym','range_gym.html'],['rangeTabThm','range_thermal.html']];
for (var i=0;i<inlineRangeNavUrls.length;i++)
{
curTab=(inlineRangeNavUrls[i][0]).toString();
curDiv='#' + curTab;
if ($(curDiv).length)
{
$(curDiv).bind("mouseover", function(){showHideRangeSlidingTabs(curTab, true);} );
$(curDiv).bind("mouseout", function(){showHideRangeSlidingTabs(curTab, false);} );
}
}
Моя теория
Я либо не вижу ослепительно очевидную синтаксическую ошибку, либо проблему передачи по ссылке.
Первоначально у меня был следующий оператор для установки значения curTab:
curTab=inlineRangeNavUrls[i][0];
Поэтому, когда возникла проблема, я понял, что при изменении (с помощью итерации цикла) ссылки на curTab я фактически изменил ссылку для всех предыдущих обработчиков событий анонимной функции на новое значение curTab а также .... именно поэтому обработчики событий всегда нацелены на последний div.
Так что мне действительно нужно было передать curTab value обработчикам событий анонимной функции, а не curTab object reference.
Итак, я подумал:
curTab=(inlineRangeNavUrls[i][0]).toString();
исправит проблему, но это не так. Та же сделка Очевидно, я упускаю некоторые ключевые и, возможно, очень базовые знания о проблеме Спасибо.