我无法弄清楚如何让我的javascript onclick事件发挥作用

时间:2013-01-25 16:02:48

标签: javascript

当我点击按钮时,除非我在html中调用该函数,否则没有任何反应。我想删除所有内联JavaScript。我已经包含了有效的html注释部分。在此先感谢您的帮助!

JavaScript的:

var welcomeString;
const TEST = 1;

function setWelcomeString() {
    "use strict";
    welcomeString = prompt("Please enter your name: ", "nobody");
}

function writeOutput() {
    "use strict";
    document.getElementById("demo").innerHTML = "Hello, " + welcomeString;
}

function main() {
    "use strict";
    setWelcomeString();
    document.getElementById("sayHi").onclick = writeOutput();
}

main();

HTML:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>**SET TITLE**</title>
        <link href="css/style.css" rel="stylesheet">
        <script src="firstScript.js"></script>
    </head>

    <body>
        <h1 id="wiggles">TEMPLATE</h1>
        <!--<button id="sayHi" onclick="writeOutput()">Say Hi</button>-->
        <button id="sayHi">Say Hi</button>
        <p id="demo"></p>
    </body>
</html>

3 个答案:

答案 0 :(得分:4)

当您将一个函数指定为事件的处理程序时,您需要分配函数本身,而不是执行该函数并像您一样分配它的返回值。改变这个:

document.getElementById("sayHi").onclick = writeOutput(); // parens

对此:

document.getElementById("sayHi").onclick = writeOutput; // no parens

这是一个jsfiddle link,其中有一个工作示例。

答案 1 :(得分:1)

您必须在load内添加整个代码,就像这样

window.load = function(){
    // your javascript here
};

另外,正如jbabey所说,使用

document.getElementById("sayHi").onclick = function(){ writeOutput();};

或者

document.getElementById("sayHi").onclick = writeOutput;

答案 2 :(得分:1)

你有两个问题。

第一个被jbabey覆盖。

第二个是firstScript.js出现在你的按钮之前。当您为其分配onClick处理程序时,这是有问题的。它在dom中不存在。

尝试将整个主脚本放在window.onload = function () { ... }内或将其移到标记的底部。