[英]Trying to understand how to use an If statement with an event
這是HTML
<body>
<div>
<button>
Button 1
</button>
<button>
Button 2
</button>
<button>
Button 3
</button>
</div>
</body> (script tag is in right place just left it out here)
這是我的代碼
(function () {
var button= document.getElementsByTagName("button");
for (var i= 0, len= button.length; i < len ;i = i + 1) {
buttton[i].onclick = function () {
alert(i)};
}
}())
因此,當我單擊每個按鈕時,為什么3都帶回3的值??? 每個按鈕不應該帶回不同的值嗎?
遍歷按鈕集合時,將為每個按鈕分配一個單擊時要執行的功能。 此函數給出並警告顯示i的值。 循環完成后,i的值將設置為3,這就是您所看到的。 如果希望每個按鈕顯示其自己的序數,則可以在循環內設置一個屬性:
button[i].setAttribute("ordinal",i);
並使用警報讀取此屬性:
button[i].onclick = function(){
alert(this.getAttribute("ordinal"));
}
您需要隔離作用域(通過閉包)才能使其正常工作。 下面的示例創建了一個立即執行的函數,該函數執行並返回捕獲循環變量的新函數。
(function() {
var buttons = document.getElementsByTagName("button");
for(var i = 0; i < buttons.length; i++)
{
buttons[i].onclick=(function(){
var n = i;
return function(){
alert(n);
};
})();
}
})();
嘗試:
(function () {
var button= document.getElementsByTagName("button");
for (var i= 0, len= button.length; i < len ;i = i + 1) {
button[i].current_i = i;
button[i].onclick = function () {
alert(this.current_i);
};
}
})()
通過將“ i”的當前值設置為按鈕的對象變量,可以保存其狀態。 這與Javascript的功能范圍而不是對象范圍有關。
干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.