亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用參數將 onlick 事件添加到多個元素

使用參數將 onlick 事件添加到多個元素

白衣染霜花 2022-10-21 17:25:51
我正在動態創建一個元素表并將它們存儲在一個數組中。以下內容可能看起來像是一場絕對的噩夢,但這就是我決定對其進行排序的方式。我現在的問題是addEventListener我想添加一個onclick連接到的事件PlayMusic()。我嘗試了一個簡單的.onclick =并省略了function(){}但隨后PlayMusic()立即執行。在function(){}那里,當我單擊其中一個元素時,第一個參數 ( i) 是“最后使用的數字”(也就是 21 個元素中的 22 個)。我將如何確保這些onclicks 中的每一個在其參數中都有正確的索引?var thetable = document.getElementById("mustable");for(var i=0; i<fullists.length-1; i++){    fullists[i][2] = [];    fullists[i][3] = [];    for(var j=0; j<fullists[i][1].length; j++)    {        var row = thetable.insertRow();        fullists[i][2][j] = row.insertCell();        fullists[i][2][j].className = "musentry";        var header = fullists[i][0].substring(0,fullists[i][0].lastIndexOf("."));        if(fullists[i][1][j][1] != undefined)            var title = fullists[i][1][j][1];        else            var title = fullists[i][1][j][0].substring(fullists[i][1][j][0].lastIndexOf("/"));        fullists[i][2][j].innerHTML = header + "<br /><b>" + title + "</b>";        fullists[i][2][j].addEventListener("click",function() { PlayMusic(i,j); },false);        fullists[i][3][j] = 0;    }}
查看完整描述

1 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

問題是,當函數執行時,i已經有了不同的值,因為循環已經繼續執行。如果您將循環更改為 uselet i而不是var i(same for j) 它將起作用,因為letfor迭代器變量中具有特殊行為,它實際上會在每次迭代時創建范圍為循環內部的變量的另一個副本,因此該副本獲勝不改變。

另一種方式,基本上是相同的,但明確地完成:首先將它存儲在另一個塊范圍的變量中。例如const i2 = i,然后i2function () {}. 對j.

或者,寫.addEventListener(..., PlayMusic.bind(null, i, j)). 你可以從bind一個函數創建一個新函數,其中 athis和 arguments 已經綁定到它。由于綁定立即發生,從而捕獲了 and 的當前值ij這也解決了它。


查看完整回答
反對 回復 2022-10-21
  • 1 回答
  • 0 關注
  • 89 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號