1. 程式人生 > >JS中對於for迴圈中點選事件的理解(通俗版)

JS中對於for迴圈中點選事件的理解(通俗版)

在學習JS時遇到了一個問題,就是如果有多個按鈕時,我們可以通過document.getElementByTagName(“button”)的方式來獲取事件陣列,在獲取後我們需要監聽每一個按鈕是否被點選。最簡單的方式就是分開寫,一個按鈕對應一個點選事件函式,這樣雖然通俗易懂,但是這樣的程式碼量是十分大的,既然我們獲得的是一個事件的陣列,為什麼不用一個for迴圈來解決呢,於是就有了下面這一種寫法(本程式碼是通過點選按鈕實現圖片的切換):

for(var i=0; i<allLi.length; i++){
            var sLi = allLi[i];
            sLi.index = i+1;
            sLi.onclick = function () {
                box.style.background = 'url("images/0'+ this.index +'big.jpg") no-repeat';
            }
        }

剛開始看到這個也是一臉懵逼,因為之前一直做的是ACM,對於程式執行過程十分敏感,感覺這不合常理啊,一直不知道他這是怎麼執行的,for迴圈執行完了以後,應該再去點選的時候就沒用了啊,但是這裡依舊可以,說明在JS中,事件的監聽的執行不是按照嚴格的執行先後順序來的,而是隨時點,隨時執行,這種寫法只是簡化了上面所提到的最直接的書寫方式,通過for迴圈去實現後,其實和把他們展開的寫法是一模一樣的,但是要確定你點的究竟是哪個按鈕,就要通過this來實現。

另一個就是需要通過改變其背景屬性來實現背景的切換,那就是要改名字,名字要更改一個數字,但是我們不能通過i去實現,因為在for迴圈執行完畢後,i就變成了5,那麼就無法去改變了,所以我們可以通過改變它的index屬性來實現。