Почему функция onclick fire следующая не назначена?

Почему нажатие кнопки вызывает предупреждение? Он присваивается абзацу, а не кнопке. HTML:

<button onclick="foo()">Click me</button>
<p id="hidden"> 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 ответа

Из-за этой строки:

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

Здесь вы вызываете функцию innnerClick немедленно.

Просто удалите () чтобы передать ссылку на функцию вместо ее вызова, т.е.

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


Поскольку вам нужно добавить ссылку на функцию следующим образом:

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

Проблема здесь же, нам просто нужно передать ссылку функции на обработчик кликов здесь, например: -

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

Fiddle Demo

licensed under cc by-sa 3.0 with attribution.