我是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>
答案 0 :(得分:31)
这是因为该函数不在全局上下文中,而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');
}
答案 1 :(得分:14)
您可以在document.ready中将doIt定义为函数语句。
您应该使用函数表达式 或将函数声明为就绪函数。
$(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函数中定义的点击处理程序替换,但可以正常工作。
答案 2 :(得分:3)
你需要做的是使用像这样的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/
答案 3 :(得分:3)
Javascript有两种范围,全局和功能级别。如果在函数内声明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'); }
})
答案 4 :(得分:1)
$(document).ready(function()
{
});
是document.ready的事件处理程序,该处理程序内的函数在该范围内。
更好的方法是在里面插入click事件的处理程序,然后在那里调用该函数。
$(document).ready(function()
{
alert('ready');
$('body input').click(function(){
doIt();
});
function doIt() {
alert('did it');
};
});
此ALSO具有从标记中删除代码的副作用(一件好事),因为您可以从输入标记中删除该onclick。
答案 5 :(得分:0)
你现在正在做的只是将一个函数doIt()放在一个(用于所有意图和目的)window.onload事件中。除非你将它绑定到一个元素,否则永远不会在document.ready之外调用此函数,因为它卡在document.ready的范围内。
您需要将您的功能移到document.ready之外,以便外部事件可以调用它。
只需一点参考资料:http://www.webdevelopersnotes.com/tutorials/javascript/global_local_variables_scope_javascript.php3
答案 6 :(得分:0)
试试这个......
$(document).ready(function() {
alert('ready');
$("#Go").submit(function(event) {
alert('did it');
});
});
<input name="Go" id="Go" type="button" value="Go" />
答案 7 :(得分:0)
是的,正如其他人所提到的,你真的需要在jquery ready声明之外移动该函数。另请注意,javascript区分大小写,因此您应该使用onClick而不是onclick。此致