Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use addEventListener

I was making a script that creates div elements each time a button is pressed. Originally I had the function called inline with the onclick attribute, but jslint doesn't like that so I moved it out and instead tried to use addEventListener("click",function());

I've never used addEventListener() before so I'm not even sure I am using it correctly.

The problem is that it creates one div when the page loads and won't do anything when the button is pressed.

Thank you in advance.

here is what I have:

<body>
<form>
    <textarea id="a"></textarea>    
    <br>
    <input value="button" type="button">
</form>
<div id="content">
</div>
<script>
    /*jslint browser:true */
    function createEntry(text) {
        "use strict";

        var div = document.createElement("div");
        div.setAttribute("class", "test");
        document.getElementById("content").appendChild(div);
    }
    var input = document.getElementsByTagName("input")[0];
    input.addEventListener("click", createEntry(document.getElementById('a').value));
</script>

like image 876
Kyle Messner Avatar asked Dec 07 '12 21:12

Kyle Messner


2 Answers

Change the event listener like this

input.addEventListener("click", function(){
    createEntry(document.getElementById('a').value);
});

as it stands, you're passing the result of createEntry as an event listener, not the function itself

More information here:

https://developer.mozilla.org/en/docs/DOM/element.addEventListener

like image 89
lostsource Avatar answered Oct 20 '22 02:10

lostsource


Change this line

input.addEventListener("click", createEntry(document.getElementById('a').value));

into

input.addEventListener("click", function(){
createEntry(document.getElementById('a').value);
});
like image 28
chtenb Avatar answered Oct 20 '22 02:10

chtenb