1


これは私の最初の質問です。おそらく非常にばかげています:)

GM_listValues() から返された配列内の値の選択があります。
コレクションをループするときに、関数を呼び出して保存された値を削除し、ページをリロードするボタンを動的に作成したいと考えています。

deleteB.addEventListener("click", function() {deleteTrip(names[i]);pageSelect();}, false);

上記は、イベントをボタン ( ) に添付するために使用している行ですdeleteB。ただし、ボタンを押すと、javascript はnamesカウント変数 ( ) を使用して listValues ( )の配列にアクセスしようとしますi。当然、これは存在しません。なぜなら、ループは現在完了しており、namesとにかくグローバルではないからです。

私が知りたいのは、コードでnames[i]への参照を必要としないように、ボタンで関数を作成している間に文字列値をコピーする方法があるかどうかnames[i]です。

これはおそらく本当に単純な答えだと思いますが、困惑しました。これは、JavaScriptを使用した最初の作業の一部です。

前もって感謝します。

4

2 に答える 2

2

クロージャーを使用して値を記憶します。

function createDeleteFunc(name) {
  return function(){deleteTrip(name);pageSelect();}
}

for() {
...
deleteB.addEventListener("click", createDeleteFunc(names[i]), false);
...
}
于 2011-04-15T16:31:02.193 に答える
0

問題は、作成するすべての関数が同じi変数を参照することです。それらが呼び出されると、 を削除しようとしますnames[i]が、i現在は と等しいnames.lengthため、機能しません。

names[i]解決策は、関数ごとに個別の参照を作成することです。これは通常、クロージャーで行われます(ポールの答えのように)

于 2011-04-15T20:28:01.343 に答える