【问题标题】:setting variable to be used with jquery click function设置要与 jquery click 功能一起使用的变量
【发布时间】:2010-10-21 16:45:16
【问题描述】:

如果这只是被反复询问的另一个问题,我深表歉意。我发现了一些类似的问题,这些例子并没有让我准确地到达我需要的地方。这类似于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 来启动一个 highslide 弹出窗口。我添加了 slideshowGroup 属性和它上面的 hsGroup 代码,它提取 Rel 属性的内容来定义每个属性的组。您可能立即看到的问题是 hsGroup 的内容不是该匿名函数的本地内容。所以在运行时,它的值对于应用到的每个链接总是相同的。我查看了一些闭包示例,但迄今为止未能使它们在我的情况下工作。

谢谢,

【问题讨论】:

  • 哈哈! /掌心。我猜这是其中一个星期。

标签: javascript jquery closures


【解决方案1】:

您只需要一个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 });
});

【讨论】:

    【解决方案2】:

    这是因为你没有将hsGroup声明为本地,你缺少var

    var hsGroup = $(this).attr("rel");
    

    否则,hsGroup 是全局的,因此设置为最后一次迭代的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2020-05-19
      • 2013-08-13
      • 1970-01-01
      相关资源
      最近更新 更多