Javascript:在页面加载时调用函数而不是onclick/onsubmit

Dan*_*yth 6 html javascript alert function onclick

我对JS比较陌生,但我之前已用C语言进行过编程,而我正试图绕过整个事件驱动的本质.我正在尝试创建一个验证表单输入的脚本,但是我的所有代码都在运行 - if/else中的所有内容,循环,你有什么 - 无论事件是否发生.为了测试,并且为了更容易在这里发布,我写了一个简单的程序也有这个问题.

HTML:

<button id="test">Test</button>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

function init(){
    document.getElementById("test").onclick = alert("hello");
}

window.onload = init;
Run Code Online (Sandbox Code Playgroud)

根据我的理解,应该在页面加载时调用init函数(window.onload),并且当点击具有ID"test"的按钮时,弹出警报(onclick).实际发生的是,一旦页面加载,警报就会弹出,如果我按下按钮,警报会再次弹出.

我的想法是我对JS的执行顺序做了一些不正确的假设,但我不能想到那是什么.有人能够对此有所了解吗?

mat*_*mmo 10

那不对,它应该是:

function init(){
    document.getElementById("test").onclick = function () { alert("hello"); };
}
Run Code Online (Sandbox Code Playgroud)

这是因为您需要在JavaScript中将函数本身分配给click事件(alert是一个函数).

以此为例:

function hello() {
    alert("hello");
}

document.getElementById("test").onclick = hello;
Run Code Online (Sandbox Code Playgroud)

注意我没有把功能()后的括号括起来hello?那是因为我正在使用对函数本身的引用.如果我放括号,我实际上是在点击分配发生的时间点评估该功能.

这样做:

document.getElementById("test").onclick = hello();
Run Code Online (Sandbox Code Playgroud)

将显示警告将在此行执行后alert 立即显示.

  • 换句话说:`x = alert()`表示:`x`是`alert()`statment的返回值.什么是返回值?让我们执行它来找出 - 这就是执行发生的地方! (3认同)
  • 你必须将函数调用本身包装成一个函数,例如:`onclick = function(){myFunction(myVariable); 这将具有相同的范围 (2认同)