1

我正在尝试通过循环绑定点击事件。

只要我参考相对于原始绑定(使用this),这工作正常。问题是,这是不切实际的使用,this因为我正在切换的元素位于 DOM 的单独部分中。

结果,在这种情况下,第 4 行将始终引用“图像”。

咖啡脚本:

for name in ["contact", "kws", "image"]
  $("#expand-#{name}").bind('click', ->
    $(this).toggleClass("icon-plus-sign").toggleClass("icon-minus-sign")
    $(".#{name}-expander").toggle()
  )

可悲的是,我只想重复代码。

谢谢,贾斯汀

4

1 回答 1

1

如果我正确理解了您的问题,则说明您遇到了可变范围问题。name将始终是您的处理程序运行时分配的最后一个值。

Coffeescript 提供了do关键字来生成自调用闭包并为name:

for name in ["contact", "kws", "image"]
    do (name) ->
        $("#expand-#{name}").bind('click', ->
            $(this).toggleClass("icon-plus-sign").toggleClass("icon-minus-sign")
            $(".#{name}-expander").toggle()
        )
于 2012-09-14T19:21:37.350 回答