目标
我想将事件处理程序动态分配给整个站点页面上的某些 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];
因此,当问题发生时,我认为当我更改(通过 for 循环迭代)对 curTab 的引用时,我实际上正在将所有以前的匿名函数事件处理程序的引用更改为新的 curTab 值......这就是为什么事件处理程序始终以最后一个 div 为目标。
所以我真正需要做的是将 curTab值传递给匿名函数事件处理程序,而不是 curTab对象引用。
所以我认为:
curTab=(inlineRangeNavUrls[i][0]).toString();
可以解决问题,但不能。同样的交易。所以很明显我错过了一些关于这个问题的关键知识,而且可能是非常基本的知识。谢谢。