在元素上添加事件监听器 - Javascript

时间:2011-06-22 19:10:26

标签: javascript dom element event-listener

我是否可以通过onload函数在javascript中监听onblur或onclick事件?而不是在元素本身中这样做。

<input type="button" id="buttonid" value="click" onclick="func()">

变成类似

的东西
function onload() {
      var button = document.getElementById("buttonid");
      button.addEventListener("onclick", function() { alert("alert");});
}

修改

<html>

<head>

     <script>

     function onload() {

        var button = document.getElementById("buttonid");

        if(button.addEventListener){
             button.addEventListener("click", function() { alert("alert");});
        } else {
             button.attachEvent("click", function() { alert("alert");});
        };
     };

          window.onload = onload;


     </script>

</head>

<body>

<input type="button" id="buttonid" value="click">


</body>

</html>

更新

 <script type="text/javascript">

 function on_load() {

    var button = document.getElementById("buttonid");

    if(button.addEventListener){
         button.addEventListener("click", function() { alert("alert");});
    } else {
         button.attachEvent("click", function() { alert("alert");});
    };
 };

      window.onload = on_load();


 </script>

5 个答案:

答案 0 :(得分:16)

你这样做的方式很好,但是click事件的事件监听器应该是这样的:

button.addEventListener("click", function() { alert("alert");});

请注意,click事件应附加"click",而不是"onclick"

您也可以尝试以旧方式执行此操作:

function onload() {
   var button = document.getElementById("buttonid");
   // add onclick event 
   button.onclick = function() { 
        alert("alert");
   }
}

更新1

您还需要监控IE&lt; 9,因为那些V使用attachEvent()。像这样附加事件,因此它可以与恐龙浏览器一起使用:

if(button.addEventListener){
    button.addEventListener('click', function() { alert("alert");});    
} else if(button.attachEvent){ // IE < 9 :(
    button.attachEvent('onclick', function() { alert("alert");});
}

更新2

根据您的修改,此应该有效 works just fine

<html>
    <head>
        <script type="text/javascript">
            function init() {
                var button = document.getElementById("buttonid");
                if(button.addEventListener){
                    button.addEventListener("click", function() { alert("alert");}, false);
                } else if(button.attachEvent){
                    button.attachEvent("onclick", function() { alert("alert");});
                }
            };
            if(window.addEventListener){
                window.addEventListener("load", init, false);
            } else if(window.attachEvent){
                window.attachEvent("onload", init);
            } else{
               document.addEventListener("load", init, false);
            }
        </script>
    </head>
    <body>
        <input type="button" id="buttonid" value="click">
    </body>
</html>

请不要使用window.onload = on_load();,这会阻止所有其他onload事件侦听器被触发,或者您冒着被覆盖的事件监听器的风险。考虑按照我上面建议的方式附加onload事件。

答案 1 :(得分:1)

更好的方式是使用DOM(完美地工作)。 Firs写你的函数/类并在以下文章中使用它:

document.addEventListener('DOMContentLoaded', function(){
  // put here code
});
<!DOCTYPE html>
<html>
<head>
  <script type="text/javascript">
    function myFunc(){ alert('Hellow there!'); }
    
    document.addEventListener('DOMContentLoaded', function(){
        document.getElementById('mybtn').addEventListener('click', myFunc);
    });
  </script>
</head>
  <body>
    <button id="mybtn">Cklik!</button>
  </body>
</html>

使用这几行并不重要。你可以将它放在头部或体内。

答案 2 :(得分:0)

动态添加事件处理程序的更好方法是使用像jQuery这样的JavaScript库,因为它会抽象出任何特定于浏览器的细节。

答案 3 :(得分:0)

在评论部分继续我的对话......

@simplified,试着把它放在&lt;头&gt;你的网页

<script type="text/javascript">
function my_onload() {
  var button = document.getElementById("buttonid");
  if(button.addEventListener){
    button.addEventListener("click", function() { alert("alert");}, true);
  }else{
    button.attachEvent("click", function() { alert("alert");});
  };
};
window.onload = my_onload;
</script>

看看会发生什么。另外,请告诉我们您使用的是哪种浏览器。 https://developer.mozilla.org/en/DOM/element.addEventListener

答案 4 :(得分:0)

<script>
var click = document.getElementById("click");
click.addEventListener("click", function() {
  var required = document.getElementById("required").value;
  if (required===null || required==="") {
    alert("Please make sure all required field are completed");
  }
  else  {
    alert("Thank you! \nYour sumbission has been accepted and you will receive a conformation email shortly! \nYou will now be taken to the Home page.");
  }
});
</script><html>
<body>
<div id="popup">
    <textarea cols="30" rows="2" name="required" id="required"></textarea>
    <input type="submit" id="click" value="Submit">
           <input type="reset" value="Reset" />
</div>
</body>
</html>