web-dev-qa-db-fra.com

Ajout d'auditeurs d'événement sur des éléments - Javascript

Existe-t-il un moyen d'écouter les événements onblur ou onclick en javascript à partir d'une fonction onload? au lieu de le faire dans l'élément lui-même.

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

devenir quelque chose comme

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

MODIFIER

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

METTRE À JOUR

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

12
simplified.

La façon dont vous le faites est correcte, mais votre auditeur d’événement pour l’événement click devrait ressembler à ceci:

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

Remarquez que l'événement click doit être associé à "click" et non "onclick".

Vous pouvez également essayer de le faire à l'ancienne:

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

Mise à jour 1

Vous devez également surveiller IE <9, car ceux-ci utilisent attachEvent(). Attachez l'événement de cette façon, cela fonctionnera donc avec les navigateurs de dinosaures:

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

Mise à jour 2

En fonction de votre modification, cette devrait marcher fonctionne très bien .

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

N'utilisez pas window.onload = on_load();, cela évitera que tous les autres écouteurs d'événements onload soient renvoyés ou vous risquez que votre auditeur d'événements soit écrasé. Envisagez de rattacher l'événement onload à la manière que je suggère ci-dessus.

16
Shef

La meilleure façon de l'utiliser est DOM (fonctionne parfaitement) comme ceci . Les sapins écrivent votre fonction/classe et l'utilisent dans:

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>

Peu importe où vous avez utilisé ces quelques lignes. Vous pouvez le mettre en tête ou en corps.

1
Jerzy Drożdż
<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>
0
Waheed Rahman

pour approfondir ma conversation dans la section commentaires ...

@ simplifié, essayez de mettre ceci dans la <tête> de votre page

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

et voir ce qui se passe. Nous vous invitons également à nous indiquer le navigateur que vous utilisez . https://developer.mozilla.org/en/DOM/element.addEventListener

0
thescientist

Un meilleur moyen d’ajouter dynamiquement des gestionnaires d’événements serait d’utiliser une bibliothèque JavaScript telle que jQuery, car elle supprime les détails propres au navigateur.

0
FishBasketGordo