1

我认为 $(document).ready(...) 中的脚本总是会在加载 DOM 后执行。因此,如果 $(document.ready(...) 进入头部或主体,则无关紧要。但是,下面的代码不会像我想要的那样在屏幕上生成“苹果”。如果我不过,在页面底部找到 giveApples() 函数,它可以工作。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(document).ready(giveApples());
function giveApples() {
    $("#appleTree").html("apples");
}
</script> 
</head>
<body>
<div id="appleTree"></div>
</body>
<script>
//$(document).ready(giveApples());
</script>
</html>

谁能纠正我对 DOM、页面加载、脚本标签位置、(document).ready() 或导致此问题的任何其他内容的误解?我对网络编程还是很陌生。

4

5 回答 5

13

那是因为您实际上并没有将事件处理程序绑定到ready事件。您giveApples立即调用并将其返回值 ( undefined) 作为事件处理程序传递给绑定(静默失败)。您需要将函数传递.ready()给,而不是调用它!

$(document).ready(giveApples);

注意缺少的括号。

于 2013-01-12T00:12:37.387 回答
10

但事实并非如此。问题是你不是giveApples作为参数传递,而是它的返回值,因为你正在调用它(因为())。为了使它工作,不要放括号:

$(document).ready(giveApples);

根据您当前的代码,传递给的值$(document).readyis undefined,因为giveApples不返回任何值。

你也可以这样做:

$(document).ready(function(){
    giveApples();    //However, if you access the 'this' keyword inside the giveApples function, it will point to 'window', and not 'document'
});

alert如果你有这两个值,你可以看到我上面解释的内容:

alert(giveApples);    //Shows the giveApples function body, properly
alert(giveApples());  //Shows undefined, since giveApples is being called and does not return any value

当您使用 DOM 事件(onload,onclick等)时也是如此。你这样做:

window.onload = myFunction;

并不是:

window.onload = myFunction();
于 2013-01-12T00:12:56.393 回答
3

你缺少一个功能

使用这种语法:

$(document).ready(giveApples());

您将 giveApples 的结果作为要在文档准备好时执行的代码传递。此外,在调用它的时候,这个函数还没有被声明。

正确的语法

这会起作用:

$(document).ready(function() {
    giveApples();
});

就像这样:

$(document).ready(giveApples);
于 2013-01-12T00:13:42.617 回答
1

回答你的名义问题,因为其他人已经用与 document.ready() 的位置无关的代码确定了你的问题的根源......

这并不重要。这只是很多人遵循的标准惯例。

很多人也支持将<script>标签作为标签中的最后一个元素<body>

证明:看到了吗?这是有争议的。我什至投了反对票。=)

于 2013-01-12T00:12:26.493 回答
0

您可以将 srcipt 放在您想放置的任何位置。html 将从上到下执行。是的,$(document).ready(...) 将始终在 DOM 加载后执行。但是在您的代码中,您有将函数放在 $(document).ready 之外。这意味着它将在 DOM 加载时执行。也许你可以这样做:$(document).ready(function giveApples(){$("#appleTree").html (“苹果”);})。如果你想学习JQuery,我会给你一个链接,我也是新手。非常棒。所以玩得开心。

30 天学习 jquery

w3school

于 2013-01-12T00:42:41.510 回答