JS事件函數不能傳參數的解決辦法。

昨天遇到一個問題,關於事件函數的傳參問題,現在我抽象出來代碼如下:

HTML:

<div>0</div>
<div>0</div>
<div>0</div>
<div>0</div>
現在我想用for循環給每個div加個單擊事件,單擊一下,彈出是第幾個div即for循環裏面的i的值,JS代碼應該如下:
window.οnlοad=function(){
var div=document.getElementsByTagName('div');
for(var i=0;i<div.length;i++){
 div.item(i).οnclick=function(){
     alert(i);
}}
}

以上代碼運行之後,發現單擊的時候,每一個彈出的都是4。

這是爲什麼呢?原因很簡單,在for語句進行循環的時候,並沒有把在循環時候的i的值賦給

<pre name="code" class="javascript">alert(i);

而是在循環的過程中,沒有執行到內部,所以等到循環結束,i的值變成了4,最後單擊的時候彈窗都是4.那麼該怎麼解決這個問題呢?

或許很容易想到一個辦法——傳參!執行以下代碼!

window.οnlοad=function(){
var div=document.getElementsByTagName('div');
for(var i=0;i<div.length;i++){
 div.item(i).οnclick=function(i){
     alert(i);
}}
}
運行之後,單擊0,彈窗出現 [object MouseEvent] 提示是個鼠標事件對象,是因爲在事件函數中,默認參數即是這個事件參數,那麼我想實現上述想法,有沒有其他的方法。既然無法傳參,但是又必須通過外部的值來引用進來。目前我只想到一個辦法,那就是我這樣來寫代碼:

window.οnlοad=function(){
var div=document.getElementsByTagName('div');
for(var i=0;i<div.length;i++){
div.item(i).id=i+'aaaaaa';//通過給其定一個屬性的值來引用。
  div.item(i).οnclick=function(i){
     alert(this.id.substring(0,1));
}}
}
再運行,點擊之後,分別彈出0123.OK大功告成!
發佈了36 篇原創文章 · 獲贊 30 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章