如果这只是另一个被一遍又一遍地问的问题,我很抱歉。我发现了一些类似的问题,这些例子并没有让我到达我需要的地方。这类似于jQuery Closures, Loops and Events。
$('a.highslide').each(function() {
hsGroup = $(this).attr("rel");
if(hsGroup.length > 1){
hsGroup = hsGroup.replace(/\s/g , "-");
}
this.onclick = function() {
return hs.expand(this, { slideshowGroup: hsGroup });
}
});
此代码设置启动高滑动弹出窗口的onclick。我已经添加了slideshowGroup属性和它上面的hsGroup代码,它们提取了Rel属性的内容来定义每个属性的组。您可能会立即看到的问题是hsGroup的内容不是该anon函数的本地内容。因此,在运行时,对于应用的每个链接,其值始终相同。我查看了一些封闭示例,但迄今为止未能使它们在我的情况下工作。
谢谢,
答案 0 :(得分:5)
您只需要var
为每个链接创建一个,如下所示:
$('a.highslide').each(function() {
var hsGroup = $(this).attr("rel");
//^ -- add this
if(hsGroup.length > 1){
hsGroup = hsGroup.replace(/\s/g , "-");
}
this.onclick = function() {
return hs.expand(this, { slideshowGroup: hsGroup });
}
});
没有 var
你有一个全局hsGroup
变量,它被重复用于每个循环,并以每次点击时使用的相同的最后一个值结束。
或者,只需在click
事件发生时进行替换,如下所示:
$('a.highslide').click(function() {
var hsGroup = $(this).attr("rel");
if (hsGroup.length > 1) hsGroup = hsGroup.replace(/\s/g , "-");
return hs.expand(this, { slideshowGroup: hsGroup });
});
答案 1 :(得分:4)
这是因为您没有将hsGroup
声明为本地,因此您遗漏了var
:
var hsGroup = $(this).attr("rel");
否则,hsGroup
是全局的,因此设置为最后一次迭代的值。