求助程式員大佬,在注冊事件后,并給予對應的樣式處理函式。這程序中 如圖畫紅線的地方怎么錯了,怎么改,為什么?
uj5u.com熱心網友回復:
因為liObj是undefined,你的事件是在for回圈里注冊的,而i是用var宣告的變數,var宣告的是全域變數,也就是說回圈結束后var i的值還存在,即i = liObj.length。當你事件執行的時候,其實讀取的是liObj[liObj.length].style,很明顯為undefined。解決方法:
1.把var換成let,let是塊級作用域,只對當前塊起作用。
2.添加事件時,把i當成引數傳遞進去,如:liOjb[i].onmouseover = function ( i ) {...}
uj5u.com熱心網友回復:
i是全域變數,回圈后i的值是6,你的所有li注冊的事件都是liObj[6],所以訪問到的值是undefined一個辦法是改成let宣告,這樣每個li才能成功注冊對應的事件
不過,像這種邏輯一般用事件委托來做比較合適
u1.onmouseover = function(event) {
let target = event.target;
if(target.nodeName = 'LI') {
target.style.backgroundColor = 'black';
}
}
u1.onmouseout = function(event) {
let target = event.target;
if(target.nodeName = 'LI') {
target.style.backgroundColor = '';
}
}
uj5u.com熱心網友回復:
謝謝了,我再細細看看uj5u.com熱心網友回復:
2樓說的很有道理了,用let,或者在這種需求下,事件委托比較合適轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/76991.html
標籤:JavaScript
上一篇:網頁的span,div內部字在網頁放大時每行的字的字數會變少
下一篇:DOM滑鼠移除事件
