使用 Javascript DOM 添加事件监听器
2013-03-22
10504
我无法通过 javascript 添加 eventListener。好的,我有一个函数可以创建 4 个锚点元素。我想在 onmouseover 时向它们添加一个事件,该事件调用一个函数来更改它们的背景颜色。这是代码(查看 createAnchor() 的倒数第二行以找到相关的代码行。
function createAanchor(index) {
var a = document.createElement("a");
var text = getText(index);
var a = document.createElement("a");
var t = document.createTextNode(text);
a.href = getHref(index);
a.appendChild(t);
a.style.textAlign = "center";
a.style.fontSize = "1.2em";
a.style.color = "white";
a.style.fontFamily = "arial";
a.style.fontWeight = "bold";
a.style.textDecoration = "none";
a.style.lineHeight = "238px";
a.style.width = "238px";
a.style.margin = "5px";
a.style.background = eightColors(index);
a.style.position = "absolute";
a.addEventListener("onmouseover", changeColor());
return a;
}
function changeColor() {
alert("EVENT WORKING");
}
好的,这是问题所在。当函数到达
a.addEventListener("onmouseover", changeColor());
时,
function changeColors()
会执行,但稍后不会在
onmouseover
上执行,这是为什么?
3个回答
-
不存在
onmouseover
这样的事件,该事件名为mouseover
。 -
您必须将函数引用传递给
addEventlistener
。()
调用该函数,正如您已经注意到的,因此...不要调用它。
应该是这样的:
a.addEventListener("mouseover", changeColor);
我建议阅读 quirksmode.org 上的 关于事件处理的优秀文章 。
Felix Kling
2013-03-22
这是因为您编写的是
changeColors()
,而不是
changeColors
。
()
告诉 JavaScript 调用该函数。
换句话说,
changeColors
本身是对该函数的引用,而
changeColors()
引用该函数
然后调用它
。函数调用的结果(函数的返回值)最终传递给
addEventListener()
。
Pointy
2013-03-22
好的,我认为我们需要了解何时在事件类型中使用前缀“on”。在 IE 8 或低于 IE8 的版本中,我们使用的附加事件和分离事件相当于 addEventListener 和 removeEventListener。有一些区别对于这个问题来说不是必需的。
使用附加事件时,事件类型以“on”为前缀,但在 addEventListener 中不使用前缀。
因此,
elem.attachEvent("onclick",listener); // <= IE8
elem.addEventListener("click",listener,[,useCapture]); // other browsers
dinesh_malhotra
2014-03-05