Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么可以';我是否使用onClick在jQuery$(document.ready)函数中执行函数?_Javascript_Jquery_Javascript Events - Fatal编程技术网

Javascript 为什么可以';我是否使用onClick在jQuery$(document.ready)函数中执行函数?

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');

我不熟悉Javascript和jQuery。我想点击一个按钮并执行一个js函数。(在本例中,它只是一个警报,但实际上是一个ajax函数。)

第一个警报出现,但单击按钮后,我再也看不到第二个(“did it”)警报。看起来javascript不认为doIt()函数是在单击按钮时定义的

以下是相关代码:

$(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。我认为

是的