为什么onclick fire next next函数没有分配给它?

时间:2013-12-23 14:00:43

标签: javascript jquery events javascript-events event-handling

为什么点击该按钮会触发警报?它被分配给段落,而不是按钮。 HTML:

<button onclick="foo()">Click me</button>
<p id="hidden" style="display:none"> I was hidden </p>

使用Javascript:

function foo(){
    document.getElementById("hidden").style.display = "block";
    document.getElementById("hidden").onclick = innnerClick(); 
}
function innnerClick(){
    alert("Ouch! That hurt!")
}

2 个答案:

答案 0 :(得分:8)

由于这一行:

// ----------------------------------------------------vv
document.getElementById("hidden").onclick = innnerClick();

您可以立即调用innnerClick函数。

只需删除()之后传递对函数的引用而不是调用它,即

document.getElementById("hidden").onclick = innnerClick;

答案 1 :(得分:3)

因为,您需要添加函数的引用,如下所示:

function foo(){
    document.getElementById("hidden").style.display = "block";
    document.getElementById("hidden").onclick = innnerClick; 
}

没有直接打电话。

Fiddle Demo

在jQuery中,我们可以重现相同的问题,如:

$('button').click(function () {
    $('#hidden').show();
    $('#hidden').click(innnerClick());  <-- see the function with () here
});

Fiddle Demo

问题在这里是一样的,我们只需要将函数引用传递给click处理程序,如: -

$('#hidden').click(innnerClick);

Fiddle Demo