为什么我不能使用onClick来执行jQuery $(document).ready函数内的函数?

jal*_*rin 15 javascript jquery javascript-events

我是Javascript和jQuery的新手.我想单击一个按钮并执行js功能.(对于这个例子,它只是一个警报,但它实际上是一个ajax函数.)

出现第一个警报,但是在我单击按钮后,我从未看到第二个警告("已做")警报.看起来javascript不认为单击按钮时定义了doIt()函数.

这是相关的代码:

$(document).ready(function()
{ 
    alert('ready');

    function doIt() {
        alert('did it');
    };
}
)

<body>
    <input name="Go" type="button" value="Go" onclick="doIt();"/>
</body>
Run Code Online (Sandbox Code Playgroud)

Nic*_*ver 33

这是因为该功能不在全局环境中,而是您onclick=""正在寻找它的地方.你需要把它移到你的外面document.ready(所以它不是专门用于那个闭包),或者(一种更好的方法IMO)将它绑定在里面document.ready,这就是我的意思:


将其绑定(删除你onclick=""的内容):

$(document).ready(function() { 
  alert('ready');
  $("input[name='Go']").click(doIt);
  function doIt() {
    alert('did it');
  }
});
Run Code Online (Sandbox Code Playgroud)

或匿名版本(再次删除你的onclick=""):

$(document).ready(function() { 
  alert('ready');
  $("input[name='Go']").click(function() {
    alert('did it');
  });
});
Run Code Online (Sandbox Code Playgroud)

或者将它移到外面(保持你的onclick=""):

$(document).ready(function() { 
  alert('ready');
});
function doIt() {
  alert('did it');
}
Run Code Online (Sandbox Code Playgroud)


Kon*_*rak 15

您可以在document.ready中将doIt定义为函数语句.

您应该使用函数表达式从ready函数声明函数.

$(document).ready(function()
{ 
    alert('ready');

    doIt = function() { //now has global scope.
        alert('did it');
    };
}
)

<body>
    <input name="Go" type="button" value="Go" onclick="doIt();"/>
</body>
Run Code Online (Sandbox Code Playgroud)

(是的,onClick实际上不是jQuery的做法,可能应该被ready函数中定义的click处理程序所取代,但是它可以正常工作.