作業デモ
var data = [1, 2, 3, 4];
for (var i = 0;i < data.length; i++) {
(function(key) {
$("#id"+key).click(function() {
$(".class"+key).hide();
});
})(data[i])
}
key
for eachループのクロージャは、ハンドラーのクリックによって作成されますが、グローバルスコープ内にあるものを指します。そしてそれは変わります。私のコードでは、キーは追加の関数ラッピングによって作成され.click
たスコープkey
を指し、key
その中で、それが新しいたびに、その関数によって作成されたスコープを指します
var data = {1, 2, 3, 4};
-これは有効なオブジェクト定義ではありません。var data = {key:"value", key2:"value",...};
上記の例は、正しく指定されたオブジェクトでも機能します。
key
次のような変数
もテストする必要があることを忘れないでください:などif(data.hasOwnProperty(key)) {...}
を除外するために.toString
(.valueOf
デフォルトのオブジェクトメソッド)
key
または、回避策のように、クリックした要素IDからいつでもクラス名を作成できます。
$("#id"+key).click(function() {
var className = ".class" + $(this).prop("id").replace("id", "");
$(className).hide();
});
そして、閉鎖は必要ありません。