设置变量以与jquery click函数一起使用

Nat*_*han 1 javascript jquery closures

如果这只是另一个被一遍又一遍地问的问题,我很抱歉.我发现了一些类似的问题,这些例子并没有让我到达我需要的地方.这类似于jQuery Closures,Loops和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 });

  }
});
Run Code Online (Sandbox Code Playgroud)

这段代码设置了一个启动高滑块弹出窗口的onclick.我已经添加了slideshowGroup属性和它上面的hsGroup代码,它们提取了Rel属性的内容来定义每个属性的组.您可能会立即看到的问题是hsGroup的内容不是该anon函数的本地内容.因此,在运行时,对于应用的每个链接,其值始终相同.我查看了一些封闭示例,但迄今为止未能使它们在我的情况下工作.

谢谢,

Nic*_*ver 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 });

  }
});
Run Code Online (Sandbox Code Playgroud)

如果没有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 });
});
Run Code Online (Sandbox Code Playgroud)