1

ループを介してクリックイベントをバインドしようとしています。

これは、元のバインド(を使用)を基準にして参照している限り、正常に機能しthisます。this問題は、私が切り替えている要素がDOMの別の部分にあるため、非現実的な使用法であるということです。

結果、4行目はこの状況では常に「画像」を参照します。

Coffeescript:

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は、自己呼び出しクロージャを生成し、適切なスコープを与えるためのdonameキーワードを提供します。

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 に答える