我正在阅读Jeremy Keith撰写的DOM脚本并测试jsLint中的代码
提前致谢
轨枕
答案 0 :(得分:1)
可能是这样的:
var initMouseover = function() {
return function () {
this.style.backgroundColor = "crimson";
this.style.color = "#ffffff";
};
};
然后在for循环中你有:
current_row.onmouseover = initMouseover();
我在你发布的链接上测试它似乎工作,也不再显示此错误。
答案 1 :(得分:1)
这样做的一种方法是在循环外定义局部函数:
(function highlightRows() {
"use strict";
if (!document.getElementById || !document.getElementsByTagName) { return false; }
function handleMouseOver () {
this.style.backgroundColor = "crimson";
this.style.color = "#ffffff";
}
function handleMouseOut() {
this.style.backgroundColor = "transparent";
this.style.color = "#000000";
}
var tbl = document.getElementById("tbl_example"), // get the table
rows = tbl.getElementsByTagName("tr"), // get all the table rows
i,
current_row;
// loop through rows adding style info to the mouseover/mouseout events
for (i = 0; i < rows.length; i++) {
current_row = rows[i];
// cancel highlight of th row
if (current_row.parentNode.tagName === "THEAD") {
continue;
}
current_row.onmouseover = handleMouseOver;
current_row.onmouseout = handleMouseOut;
}
}())
在jsFiddle中工作:http://jsfiddle.net/jfriend00/aKfWs/。
答案 2 :(得分:0)
您的代码似乎正常工作。事件处理函数中的this
是指触发事件的DOM对象,它是<tr>
元素。因此,您可以通过修改this
的属性来更改样式。您也可以通过函数参数访问同一个对象。
current_row.onmouseover = function (event) {
console.log(this == event.currentTarget);
}
这会将true
记录到控制台,因为this
和event.currentTarget
是相同的DOM元素对象。
但是,你是正确的,因为在for
循环的范围内,this
(你没有在那个确切的范围内使用)是顶级window
对象,但在事件处理函数中,this
是一个不同的对象。