第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Javascript循環(huán)中的事件處理程序-需要閉包嗎?

Javascript循環(huán)中的事件處理程序-需要閉包嗎?

慕的地6264312 2019-07-02 11:05:54
Javascript循環(huán)中的事件處理程序-需要閉包嗎?我正在處理一些HTML和Javascript代碼,這些代碼是我從其他人手中接過的。該頁面每10秒重新加載一個數(shù)據(jù)表(通過異步請求),然后使用一些DOM代碼重新構(gòu)建該表。所討論的代碼如下所示:var blah = xmlres.getElementsByTagName('blah');for(var i = 0; i < blah.length; i++) {     var td = document.createElement('td');     var select = document.createElement('select');     select.setAttribute("...", "...");     select.onchange = function() {         onStatusChanged(select, callid, anotherid);     };     td.appendChild(select);}當(dāng)onchange事件的<select>元素,但是,似乎將相同的值傳遞給onStatusChanged()方法為每個<select>在表中(我已經(jīng)驗證過,在循環(huán)的每一次迭代中,callid和anotherid正在被賦予新的、獨特的價值觀)。我懷疑發(fā)生這種情況是因為我如何設(shè)置事件處理程序,并使用select.onchange = function()語法。如果我理解它是如何正確工作的,這個語法將onchange事件的閉包設(shè)置為引用這兩個引用的函數(shù),該函數(shù)的最終值是在循環(huán)的最后一次迭代中設(shè)置的值。當(dāng)事件觸發(fā)時,callid和anotherid是上一次迭代中的值集,而不是單個迭代中的值集。有沒有方法可以復(fù)制要傳遞給的參數(shù)的值?onStatusChanged()?我改變了標(biāo)題,以更好地反映問題和公認(rèn)的答案。
查看完整描述

3 回答

?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗 獲得超12個贊

您確實需要在這里實現(xiàn)一個閉包。這,這個應(yīng)工作(讓我知道-我沒有測試)

var blah = xmlres.getElementsByTagName('blah');for(var i = 0; i < blah.length; i++) {
    var td = document.createElement('td');
    var select = document.createElement('select');
    select.setAttribute("...", "...");
    select.onchange = function(s,c,a)
    {
        return function()
        {
            onStatusChanged(s,c,a);
        }
    }(select, callid, anotherid);
    td.appendChild(select);}


查看完整回答
反對 回復(fù) 2019-07-02
?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗 獲得超3個贊

注意,OP所擁有的也是一個閉包。實際上,OP有一個更有代表性的表單,您的閉包與其他閉包共享它的環(huán)境(每個循環(huán)運行創(chuàng)建一個閉包)。但這正是產(chǎn)生意外效果的原因。

查看完整回答
反對 回復(fù) 2019-07-02
  • 3 回答
  • 0 關(guān)注
  • 333 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號