javascript函数在jquery$(document).ready块中不起作用
我试图从javascript函数在jquery$(document).ready块中不起作用,javascript,jquery,Javascript,Jquery,我试图从onclick触发器调用JavaScript函数 HTML部分: <div class="my_radio"> <input type="radio" name="my_radio" value="1" onclick="my_func()"/> first button </div><!-- end of class my_radio --> 它不起作用 但是如果我将JavaScript函数保留在$(document.read
onclick
触发器调用JavaScript
函数
HTML
部分:
<div class="my_radio">
<input type="radio" name="my_radio" value="1" onclick="my_func()"/> first button
</div><!-- end of class my_radio -->
它不起作用
但是如果我将JavaScript
函数保留在$(document.ready()
代码之外,它就可以工作了。以下是相关的代码片段:
<script type="text/javascript">
$(document).ready(function(){
function my_func111(){
alert("this is an alert");
}
});
function my_func(){
alert("this is an alert");
}
</script>
$(文档).ready(函数(){
函数my_func111(){
警报(“这是警报”);
}
});
函数my_func(){
警报(“这是警报”);
}
1) 为什么第一个JavaScript
代码片段不起作用
2) 如何使第一个JavaScript
代码段正常工作
编辑:
据我所知,
$(document).ready()
在网页完全加载时执行。那么,如果我在$(document.ready()
外部写入my_func()
,如何防止my_func()
在整个页面加载之前或之后处于活动状态 都是关于javascript执行上下文和范围的
在函数中定义的所有内容都只在函数中知道
在第一次测试中,函数my_func()
只能在ready回调(以及内部其他对象)中使用。你不能在外面引用它
在第二个示例中,函数my_func()
是文档的全局函数,可以从任何地方访问
我认识到这可能是一个非常简单的解释:-)您的第一个代码片段不起作用,因为在函数
my_func111
中,是在您的$(文档)中作为参数传递的匿名函数的本地范围内定义的。ready
调用
您可以通过将函数定义放置到文档范围并在ready函数内调用它来修复代码,例如:
function my_func(){
alert("this is an alert");
}
$(document).ready(function(){
my_func();
});
如果在回调中定义函数,则只能在此回调中使用它:
$(document).ready(function(){
function something(){
alert('test');
}
//..
something(); // Will work
}
something(); // Won't work
我猜“它不工作”,你的意思是说“我的函数没有定义”或类似的
在函数内定义函数时,内部函数在外部函数外不可见(除非它是外部函数返回语句的一部分)
您需要学习闭包,这是一个很好的教程。您将添加一个全局变量
isReady
。$(document).ready
回调部分将其更改为true
您的函数和isReady
变量都必须在$(document).ready的回调之外定义,以便可以从回调范围之外看到它们
<script type="text/javascript">
var isReady = false; // outside the onReady callback
function myFunc(){ // also outside the onReady callback
if (!isReady) return; // abort if not ready
alert("this is an alert");
}
// the onReady callback
$(function(){ // the newer jquery shorthand for: (document).ready(function(){
isReady = true;
});
</script>
var isReady=false;//在onReady回调之外
函数myFunc(){//也在onReady回调之外
if(!isReady)return;//如果未准备好,则中止
警报(“这是警报”);
}
//onReady回调
$(function(){//较新的jquery缩写,用于:(document).ready(function()){
isReady=真;
});
您的HTML代码不需要更改。-我更改了名称以使用JS和HTML约定,但本质上与您最初编写的相同
<div class="divMyRadio">
<input type="radio" id="myRadio" value="1" onclick="myFunc()"/> first button
</div><!-- end of class divMyRadio -->
第一个按钮
我
作为旁注:较新的JQuery使用$(function(){
作为$(document.ready(function())的缩写{
让事情对你来说更容易。重复问题>就像外星人说的那样>可能重复的哦让我明白你的意思said@glavić,无意复制..这会对我的帖子产生负面影响吗?是的,说“未定义”。你的链接说:网站的安全证书不可信!回答我的问题2?熟悉关闭。。很抱歉,我之前对u的评论是错误的。没有说任何话。onclick接下来要做什么?现在慢慢来,耐心地阅读您的答案。它们已经包含了您理解和回答问题所需的所有信息!我尝试了您的代码。页面加载后会立即显示警报框。单击是n如果您不希望警报显示为onload,则从$(文档)中删除my_func()调用准备好了吗?这就是我的答案。我会把其余的留给你去理解。IssiaQui:如果你的问题已经解决了,请考虑接受一个答案,以便将来也能得到帮助!对我来说,必要的和不被注意的是,在$(文档)里面的一切。准备好了在回调函数中定义。
<div class="divMyRadio">
<input type="radio" id="myRadio" value="1" onclick="myFunc()"/> first button
</div><!-- end of class divMyRadio -->