10 回答

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的概念

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;

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個贊
樓主如果改用jquery會簡單很多。
新版本的jquery使用這種寫法
$( "#dataTable tbody tr" ).on( "click", function() {
console.log( $( this ).text() );
});

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個贊
理解 閉包啊,,, 最后運(yùn)行結(jié)果 相當(dāng)于,只給最后一次循環(huán)的元素 綁定上了

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個贊
動態(tài)元素綁定應(yīng)該使用 on('click',function(){})的方式動態(tài)綁定事件啊

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)行成功

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個贊
$(".td0").append(d[i].innerHTML)
或
$(".td0")[0].innerHTML += d[i].innerHTML
添加回答
舉報(bào)