相关疑难解决方法(0)

addEventListener在没有我甚至要求的情况下调用该函数

所以我们有一个页面:

<span id='container'>
    <a href='#' id='first'>First Link</a>
    <a href='#' id='second'>Second Link</a>
</span>
Run Code Online (Sandbox Code Playgroud)

并想要添加一些点击事件:

first.addEventListener('click', function(){alert('sup!');})
Run Code Online (Sandbox Code Playgroud)

奇迹般有效!但是,当您将第二个参数设为外部函数时:

function message_me(m_text){
    alert(m_text)
}

second.addEventListener('click', message_me('shazam'))
Run Code Online (Sandbox Code Playgroud)

它立即调用该函数.我怎么能阻止这个?很烦人!

这是一个现场演示:http://jsfiddle.net/ey7pB/1/

javascript addeventlistener

15
推荐指数
4
解决办法
2万
查看次数

为什么addEventListener会在事件发生之前触发?

我正在尝试[在jsfiddle]中创建一个函数来将新创建的函数追加TextNode<p>下面的HTML中:

    <button onclick="addTextNode('YES! ');">YES!</button>
    <button onclick="addTextNode('NO! ');">NO!</button>
    <button onclick="addTextNode('WE CAN! ');">WE CAN!</button>
    <hr />
    <p id="p1">First line of paragraph.</p>
Run Code Online (Sandbox Code Playgroud)

这是我的javascript:

    function addTextNode(text) {
        var newtext = document.createTextNode(text),
            p1 = document.getElementById("p1");

        p1.appendChild(newtext);
    }
Run Code Online (Sandbox Code Playgroud)

这很好用.然而,当我试图通过从标记中删除行为来使我的javascript"不引人注目"时,症结就会显现出来......

    <button>YES!</button>
    <button>NO!</button>
    <button>WE CAN!</button>
    <hr />
    <p id="p1">First line of paragraph.</p>
Run Code Online (Sandbox Code Playgroud)

然后利用一个循环附加addEventListener到每个<button>元素,然后使用子TextNode进行调用addTextNode:

    function addTextNode(text) {
        var newtext = document.createTextNode(text),
            p1 = document.getElementById("p1");

        p1.appendChild(newtext);
    }

    var btns = document.getElementsByTagName("button");

    for(i = 0; i < btns.length; i++){ …
Run Code Online (Sandbox Code Playgroud)

javascript for-loop event-handling addeventlistener

7
推荐指数
1
解决办法
6438
查看次数