addeventlistener无法使用JavaScript

时间:2016-03-29 14:26:16

标签: javascript

我正在尝试向当前文档中的所有标记添加事件侦听器,以便在单击标记时将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>

2 个答案:

答案 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