我正在尝试向当前文档中的所有标记添加事件侦听器,以便在单击标记时将href值存储在会话中。但是我写的以下脚本甚至没有警告值“sel”。
<script type="text/javascript" >
window.onload=function(){
var x=document.getElementsByTagName("a");
for(var i=0; i<x.length; i++){
x[i].addEventListener("click", nextlocation(), false);
};
};
function nextlocation(){
sessionStorage.setItem("next","sel");
alert(sessionStorage.getItem("next"));
};
</script>
答案 0 :(得分:1)
您需要传递nextLocation函数,而不是返回该函数,如下所示:
<script type="text/javascript" >
window.onload=function(){
var x=document.getElementsByTagName("a");
for(var i=0; i<x.length; i++){
x[i].addEventListener("click", nextlocation, false); // HERE
};
};
function nextlocation(){
sessionStorage.setItem("next","sel");
alert(sessionStorage.getItem("next"));
};
</script>
答案 1 :(得分:1)
问题是您传递给nextLocation()
的{{1}}参数实际上是在调用addEventListener
,而不是引用它,因此该函数的返回值是提供给{ {1}}作为回调,但你的函数没有返回任何内容,因此整个方法调用失败。
因此,纠正问题很容易。从参数中删除
nextLocation
所以函数被引用,但没有被调用。
但是,如果您要将DOM事件标准用于事件连接(addEventListener
),那么您应该使用它,然后一致地使用它。换句话说,不要像使用()
一样使用addEventListener
事件属性,因为它们不像.onXyz()
那样健壮。
此外,您无需在window.onload
标记中添加.addEventListener()
。此外,type=text/javascript
的第三个参数指定您是否要使用事件捕获,其默认值为script
,因此无需显式传递{{1那里。
因此,代码的更正版本如下所示:
.addEventListener