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

我是新来的Javascript和jQuery。 我想单击一个button并执行一个js函数。 (对于这个例子,它只是一个警报,但它实际上是一个ajax函数。)

第一个警报出现,但是当我点击button后,我从来没有看到第二个(“做了”)警报。 它看起来像JavaScript不认为doIt()函数是在单击button时定义的。

以下是相关的代码:

$(document).ready(function() { alert('ready'); function doIt() { alert('did it'); }; } ) <body> <input name="Go" type="button" value="Go" onclick="doIt();"/> </body> 

这是因为这个函数不在全局上下文中,这就是你的onclick=""正在寻找的地方。 你需要把它移到你的document.ready之外(所以它不是仅限于这个闭包的范围),或者(更好的方法IMO)将它绑定到document.ready ,这里是我的意思是:


绑定它(删除你的onclick=""为此):

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

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

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

或者把它移到外面(让你的onclick="" ):

 $(document).ready(function() { alert('ready'); }); function doIt() { alert('did it'); } 

您在document.ready中定义doIt作为函数声明。

要么你应该使用一个函数expression式,或者把函数声明为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> 

(是的,onClick实际上并不是jQuery的做法,可能应该由ready函数中定义的click处理程序replace,但是它的工作原理是允许的

你需要做的就是像这样使用jquery绑定一个“click”事件。

 jQuery(document).ready(function($) { $('#my_button').click(function() { alert('i was clicked'); }); }); <input type="button" id="my_button" value="Go" /> 

这里是一个生活jsfiddle演示为你: http : //jsfiddle.net/8A5PR/

以下是您的手册页面: http : //api.jquery.com/click/

JavaScript有两种范围,全局和function级别。 如果你在一个函数里面声明doIt,那么它在函数之外是不可见的。 有几种方法可以解决这个问题

 //just declare the function outside the ready function $(function() { }); function doIt() { alert('did it'); } //decare a variable outside the function var doIt; $(function() { doIt = function() { alert('did it'); } }); // if you dont use var, variables are global $(function() { doIt = function() { alert('did it'); } }) 
 $(document).ready(function() { }); 

是document.ready的事件处理程序,那个处理程序中的函数就在这个范围内。

一个更好的方法是为你的click事件插入一个处理程序,然后在那里调用该函数。

 $(document).ready(function() { alert('ready'); $('body input').click(function(){ doIt(); }); function doIt() { alert('did it'); }; }); 

这也有消除你的标记(一件好事)代码的副作用,因为你可以从你的input标签删除onclick。

你现在正在做的只是把一个函数doIt()放在一个(所有意图和目的)window.onload事件中。 这个函数不会被调用到document.ready之外,除非你把它绑定到一个元素,因为它被卡在document.ready的范围之内。

你需要把你的函数移到document.ready之外,这样它可以被外部事件调用。

只是一个小链接供参考: http : //www.webdevelopersnotes.com/tutorials/javascript/global_local_variables_scope_javascript.php3

尝试这个…

 $(document).ready(function() { alert('ready'); $("#Go").submit(function(event) { alert('did it'); }); }); <input name="Go" id="Go" type="button" value="Go" /> 

是的,正如其他人所提到的那样,您真的需要将该function移到jquery ready声明之外。 另请注意,JavaScript区分大小写,因此您应该使用onClick而不是onclick。 问候