onclick依赖于for循环的i值。我该如何删除它?

时间:2012-07-06 18:02:08

标签: javascript

我正在用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,一旦for循环结束,它将始终为10。有没有办法删除对i的依赖,同时保持我的代码简洁(即使用for循环)?我不想为每个按钮写出事件处理程序。

1 个答案:

答案 0 :(得分: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将指向已点击的元素。