0

JavaScriptで簡単な電卓を書いて​​います。0~9、+、-、*、/、=、クリア用のCのボタンがあります。各ボタンの onclick にイベント ハンドラーを割り当てたい。0 ~ 9 のボタンには非常によく似たイベント ハンドラーがあるため、for ループを使用して各ボタンの onclick に割り当てました。

/* one, two, three, etc. are variables defined earlier.
 *
 * for example,
 * var one = document.getElementById("one");
 * where that element is a button that says "1"
 *
 * the "display" element is the calculator display
 */
var num_array = [one, two, three, four, five,
                 six, seven, eight, nine, zero];
for (var i = 0; i < num_array.length; ++i) {
    num_array[i].onclick = function() {
        document.getElementById("display").value += num_array[i].value;
    };
}

しかし、onclick のイベント ハンドラーは i に依存しているため、これは機能しません。i は、for ループが終了すると常に 10 になります。コードを簡潔に保ちながら (つまり、for ループを使用して) i への依存を取り除く方法はありますか? 個々のボタンごとにイベント ハンドラーを書き出す必要はありません。

4

1 に答える 1

4

this代わりに使ってみませんnum_array[i]か?

for (var i = 0; i < num_array.length; ++i) {
    num_array[i].onclick = function() {
        document.getElementById("display").value += this.value;
    };
}

thisクリックされた要素を指します。

于 2012-07-06T18:08:12.727 に答える