簡體   English   中英

試圖了解如何在事件中使用If語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM