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

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

這個動態(tài)綁定click為什么不正確

這個動態(tài)綁定click為什么不正確

函數(shù)式編程 2019-04-25 15:15:44
解釋詳細(xì)一下
查看完整描述

10 回答

?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個贊

 window.onload = function () {
     var d = document.getElementsByTagName('a');    // 假設(shè)現(xiàn)在有5個 a標(biāo)簽
     for (var i = 0; i < d.length; i++) {
         d[i].onclick = function () {
             console.log(i)          // 由于異步的關(guān)系 i 現(xiàn)在是5 , 因?yàn)榻壎ǖ姆椒ㄖ惺褂玫膇 for循環(huán)之后的i 
             d[i].innerHTML += d[i].innerHTML;
         }
     }

    // 利用閉包
    for (var i = 0; i < d.length; i++) {
        d[i].onclick = (function (i) {
            return function () {
                console.log(i)          // 
                d[i].innerHTML += d[i].innerHTML;
            }
        })(i)
    }

    // 將每個i 保存到d[i]中的 index 屬性中, 利用this.index 獲取到 對應(yīng)的 i
    for (var i = 0; i < d.length; i++) {
        d[i].index = i;
        d[i].onclick = function () {
            console.log(this.index)
            d[this.index].innerHTML += d[this.index].innerHTML;
        }
    }
};

首先 , JavaScript是沒有塊級聲明的概念的, 這樣導(dǎo)致了 for循環(huán)中 這個i 是一直使用同一個變量的,而因?yàn)槲覀凕c(diǎn)擊事件綁定的方法并沒有將當(dāng)時(shí)循環(huán)中的 i 保存下來,導(dǎo)致方法用的i 都是for循環(huán)之后的i 變量,加入循環(huán)了5次, 最終變量 i 已經(jīng)變?yōu)?了, 而此時(shí)我們 使用的di 是沒有這個元素的,因此控制臺給我們報(bào)錯了, 通過閉包,或者將循環(huán)中的i 保存到d[i]本身的屬性里面, 都能解決你的問題, 最后還是得靠你自己去理解閉包 和 this的概念


查看完整回答
反對 回復(fù) 2019-05-13
?
蠱毒傳說

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

 td0是什么,class還是id?id的話,用 #td0,class用 .td0



查看完整回答
反對 回復(fù) 2019-05-13
?
鴻蒙傳說

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個贊

閉包沒做好。。用this對象就行了,為當(dāng)前點(diǎn)擊的a對象,+=this.innerHTML

查看完整回答
反對 回復(fù) 2019-05-13
?
胡說叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個贊

事件執(zhí)行時(shí),for循環(huán)早就結(jié)束了,這個時(shí)候i已經(jīng)是最大值加1了。
解決方法是可以用閉包把每次循環(huán)i的值保存起來。
或者在事件函數(shù)內(nèi)不使用循環(huán)變量i,而是用this獲取觸發(fā)事件的元素

document.getElementById("td0").innerHTML+=this.innerHTML;


查看完整回答
反對 回復(fù) 2019-05-13
?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個贊

樓主如果改用jquery會簡單很多。
新版本的jquery使用這種寫法
$( "#dataTable tbody tr" ).on( "click", function() {
console.log( $( this ).text() );
});

查看完整回答
反對 回復(fù) 2019-05-13
?
智慧大石

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

理解 閉包啊,,, 最后運(yùn)行結(jié)果 相當(dāng)于,只給最后一次循環(huán)的元素 綁定上了


查看完整回答
反對 回復(fù) 2019-05-13
?
慕蓋茨4494581

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個贊

動態(tài)元素綁定應(yīng)該使用 on('click',function(){})的方式動態(tài)綁定事件啊


查看完整回答
反對 回復(fù) 2019-05-13
?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個贊

這位施主,你的函數(shù)出問題了
問題代碼:
d[i].onclick = function() {
$("td0").innerHTML += d[i].innerHTML
}
第一個 d[i] ,這個 i 是for循環(huán)中的參數(shù) i,沒問題
第二個 d[i] ,這個 i 是那個 i ?
我知道你意思,這個d[i],是當(dāng)前循環(huán)到的元素,可是在他并不能傳遞過去。
解決方法:
你使用this關(guān)鍵字替代onlcick函數(shù)中的 d[i] ,代碼運(yùn)行成功

查看完整回答
反對 回復(fù) 2019-05-13
?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個贊

$(".td0").append(d[i].innerHTML)

$(".td0")[0].innerHTML += d[i].innerHTML

查看完整回答
反對 回復(fù) 2019-05-13
  • 10 回答
  • 0 關(guān)注
  • 1115 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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