Javascript 为什么可以';我是否使用onClick在jQuery$(document.ready)函数中执行函数?
我不熟悉Javascript和jQuery。我想点击一个按钮并执行一个js函数。(在本例中,它只是一个警报,但实际上是一个ajax函数。) 第一个警报出现,但单击按钮后,我再也看不到第二个(“did it”)警报。看起来javascript不认为doIt()函数是在单击按钮时定义的 以下是相关代码:Javascript 为什么可以';我是否使用onClick在jQuery$(document.ready)函数中执行函数?,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我不熟悉Javascript和jQuery。我想点击一个按钮并执行一个js函数。(在本例中,它只是一个警报,但实际上是一个ajax函数。) 第一个警报出现,但单击按钮后,我再也看不到第二个(“did it”)警报。看起来javascript不认为doIt()函数是在单击按钮时定义的 以下是相关代码: $(document).ready(function() { alert('ready'); function doIt() { alert('did it');
$(document).ready(function()
{
alert('ready');
function doIt() {
alert('did it');
};
}
)
<body>
<input name="Go" type="button" value="Go" onclick="doIt();"/>
</body>
$(文档).ready(函数()
{
警报(“准备就绪”);
函数doIt(){
警惕(‘做了’);
};
}
)
您需要做的是像这样使用jquery将一个“click”事件绑定到它
jQuery(document).ready(function($) {
$('#my_button').click(function() {
alert('i was clicked');
});
});
<input type="button" id="my_button" value="Go" />
jQuery(文档).ready(函数($){
$(“#我的_按钮”)。单击(函数(){
警报(“我被点击”);
});
});
下面是一个现场JSFIDLE演示:
这是为您准备的手册页面:您需要做的是使用jquery将一个“click”事件绑定到它,如下所示
jQuery(document).ready(function($) {
$('#my_button').click(function() {
alert('i was clicked');
});
});
<input type="button" id="my_button" value="Go" />
jQuery(文档).ready(函数($){
$(“#我的_按钮”)。单击(函数(){
警报(“我被点击”);
});
});
下面是一个现场JSFIDLE演示:
这是您的手册页面:这是因为该函数不在全局上下文中,而您的
onclick=“”
正是在全局上下文中查找它的。您需要将它移到文档之外。ready
(因此它的范围不限于该闭包),或者(更好的方法是IMO)将它绑定到文档中。ready
,以下是我所指的每种方法:
将其绑定到内部(为此删除您的
onclick=“
):
或匿名版本(再次删除您的onclick=“”
):
或者将其移到外面(保持您的
onclick=“”
):
这是因为该函数不在全局上下文中,而您的
onclick=“
正是在全局上下文中查找它的。您需要将它移到文档之外。ready
(因此它的范围不限于该闭包),或者(更好的方法是IMO)将它绑定到文档中。ready
,以下是我所指的每种方法:
将其绑定到内部(为此删除您的
onclick=“
):
或匿名版本(再次删除您的onclick=“”
):
或者将其移到外面(保持您的
onclick=“”
):
您可以在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>
$(文档).ready(函数()
{
警报(“准备就绪”);
doIt=function(){//现在具有全局作用域。
警惕(‘做了’);
};
}
)
(是的,onClick实际上不是jQuery的方式,可能应该由ready函数中定义的click处理程序代替,但是它可以工作,并且允许您在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>
您应该使用函数表达式
或将函数从就绪函数中声明出来
$(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>
$(文档).ready(函数()
{
警报(“准备就绪”);
doIt=function(){//现在具有全局作用域。
警惕(‘做了’);
};
}
)
(是的,onClick并不是真正的jQuery方式,可能应该被ready函数中定义的click处理程序所取代,但是它可以工作并且是允许的您现在所做的只是将函数doIt()放在window.onload事件。此函数永远不会在document.ready之外调用,除非您将其绑定到元素,因为它卡在document.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>
您需要将函数移到document.ready之外,以便外部事件可以调用它
只是一个供参考的小链接:您现在所做的只是将函数doIt()放入(出于所有目的)window.onload事件中。除非您将其绑定到元素,否则此函数永远不会在document.ready之外被调用,因为它卡在document.ready的范围内 您需要将函数移到document.ready之外,以便外部事件可以调用它 只是一个供参考的小链接:试试这个
$(document).ready(function() {
alert('ready');
$("#Go").submit(function(event) {
alert('did it');
});
});
<input name="Go" id="Go" type="button" value="Go" />
$(文档).ready(函数(){
警报(“准备就绪”);
$(“#Go”).submit(函数(事件){
警惕(‘做了’);
});
});
试试这个
$(document).ready(function() {
alert('ready');
$("#Go").submit(function(event) {
alert('did it');
});
});
<input name="Go" id="Go" type="button" value="Go" />
$(文档).ready(函数(){
警报(“准备就绪”);
$(“#Go”).submit(函数(事件){
警惕(‘做了’);
});
});
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'); }
})
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'); }
})
是document.ready的事件处理程序,则该处理程序中的函数在该范围内
更好的方法是在其中插入click事件的处理程序,然后在那里调用该函数
$(document).ready(function()
{
alert('ready');
$('body input').click(function(){
doIt();
});
function doIt() {
alert('did it');
};
});
这还有从标记中删除代码的副作用(一件好事),因为您可以从输入标记中删除onclick
是document.ready的事件处理程序,则该处理程序中的函数在该范围内
更好的方法是在其中插入click事件的处理程序,然后在那里调用该函数
$(document).ready(function()
{
alert('ready');
$('body input').click(function(){
doIt();
});
function doIt() {
alert('did it');
};
});
这也有从标记中删除代码的副作用(一件好事)您可以从输入标记中删除onclick。是的,正如其他人所提到的,您确实需要将函数移到jquery ready声明之外。另外请注意javascript区分大小写,因此您应该使用onclick而不是onclick。我认为是的