重複の可能性:
Javascript の悪名高いループの問題?
私は小さな問題を抱えています。見つけられないように見えるので、ここにどのような種類のロジックが欠けているかを理解していただければ幸いです。
以前の操作の結果を含む配列があります。配列が次のようになっているとしましょう:
var results = [0, 1];
次に、いくつかのボタンを作成する一連のコードがあり、forループ内で、配列の位置に応じて、これらのボタンに異なる機能を割り当てます。問題は、何らかの理由で、作成されたすべてのボタン (この場合は 2 つ) が、配列の最後の値に割り当てられた関数で出力されることです (この場合、最初の 0 と 0 ではなく、両方が 1 つとして出力されます)。 2 番目の 1)
これはコードです:
for (var i = 0; i < results.length; i++) {
var br2 = b.document.createElement("br");
var reslabel = b.document.createTextNode(Nom[results[i]].toString());
var card = document.createElement("input");
card.type = "button";
id = results[i]; // this is the problematic value.
card.onclick = newcard; // this function will use the above value.
card.value = "Show card";
divcontainer.appendChild(br2);
divcontainer.appendChild(reslabel);
divcontainer.appendChild(card);
}
このコードは、配列内の要素と同じ数のボタンを生成し、それぞれに適切なラベルを付けます (別の配列からラベルを取得します)。すべてがまったく問題ありません。次に、ボタンをクリックします。すべてのボタンでnewcard機能を実行する必要があります。その関数にはid変数が必要なので、この場合は次のようにする必要があります。
- 最初のボタン:値 0 の
newcard変数を使用して実行id - 2 番目のボタン:値 1 の
newcard変数を使用して実行id
しかし、両方のボタンがid1 として実行されます...なぜですか?
それは非常に単純かもしれませんし、私のタイムゾーンではすでにかなり遅いかもしれません:-) とにかく、コメントをいただければ幸いです。この辺で色々と勉強中…
ありがとう!
編集して newcard の定義を追加します。
function newcard() {
id = id;
var toerase = window.document.getElementById("oldcard");
toerase.innerHTML = "";
generate();
}
the function generate will generate some content using id. Nothing wrong with it, it generates the content fine, is just that id is always set to the last item in the array.