首页 > 解决方案 > 为什么 onclick = function() 在文档准备好的内部不起作用?

问题描述

查看何时应该使用 jQuery 的 document.ready 函数?并且表单提交按钮 onclick 没有调用我的 JS 函数,给人一种感觉,使用$document.ready(function(){})应该对代码没有害处,而是为了好的。

onclick但是当我在按钮的方法中输入一个函数时,ready()语句里面的函数不会被执行。为什么这样?

例如,此代码不会发出警报

$(document).ready(function(){
  function f(){
  alert("alert");
  }
})
/*function f(){
  alert("alert");
  } */
<button onclick="f()">
My Button
</button>

我知道如果我使用 jQuery 选择器使其工作,它会 ( $("button").click(f))。但是为什么这个方法会失败?

标签: javascriptjqueryhtml

解决方案


这是范围的问题——在函数内部声明的函数不能在外部函数外部访问,就像在函数内部声明的变量一样:

(function(){
    var a = 'hello';
    function b () {
        console.log(a);
    }
})();

a;   // syntax error - a is undefined
b(); // syntax error - b is undefined

您可以通过将函数分配给全局变量来使其工作:

var f;

$(document).ready(function(){
  f = function(){
    alert("alert");
  }
})

推荐阅读