2

这里的 W3Schools 网站上发布了一个 jQuery 测验...

http://www.w3schools.com/quiztest/quiztest.asp?qtest=jQuery

问题#16如下,

在文档加载完成之前,哪个 jQuery 函数用于阻止代码运行?

A. $(document).load()

B. $(document).ready()

C. $(body).onload()

我选择答案 A 弄错了。(他们的官方答案是 B。)

我回答了它,以为我知道以下内容,

  1. document.load在页面上的所有内容(包括所有图像)加载后触发

  2. document.ready 仅在 DOM 加载后触发(不一定所有图像都已加载)

我将原始问题的措辞解释为“文档已完成加载”,以包括所有内容(包括所有图像)。毕竟,我认为这就是他们称之为“document.load”的原因。同样,为了使他们的答案正确,您必须得出结论,“DOM”等同于“文档”。这似乎不对,否则为什么将其称为“文档对象模型”(DOM)而不仅仅是“文档”?

尽管 W3School 声称 B 是正确答案,但真正的正确答案是什么?

谢谢你的想法。

旁注:在我的其他相关问题 中引用我自己的评论......

“实际上,我在 jQuery 网站上学习了大部分 jQuery,当我遇到困难时,我会在 StackOverflow 上进行搜索。我主要是在 W3School 上玩测验,因为我正在调查他们获得 jQuery 认证的“先决条件”。我没有认为自己是 jQuery 专家,但我在他们的测验中轻松获得了 95% (19/20)。看到该答案中的不当措辞,我想我会通过在此处发布来确认我已经怀疑的内容。我对这些类型的看法认证现在正在发生变化。”


编辑:

我通知了 W3Schools 这个线程的存在。


编辑2:

当我回答最初的测验问题时,我在想 $(window).load(),因此我的测验答案显然不正确。我相信这个事实没有留下三个多项选择选项作为正确答案。请参阅下面的详细答案。

4

2 回答 2

5

这个问题模棱两可的。

正确答案取决于您对document的定义。如果是 DOM,则为 B。如果是整个页面的资产,则为$(window).load(function() { ... }).

如您所见,这个测验很糟糕。

于 2011-04-19T02:47:19.873 回答
2

jQuery API 文档...

。准备好()

描述:指定当DOM完全加载时要执行的函数。虽然 JavaScript 在页面呈现时提供了用于执行代码的加载事件,但在完全接收到所有资产(例如图像)之前,不会触发此事件。在大多数情况下,脚本可以 在 DOM 层次结构完全构建后立即运行。

更多关于 jQuery 就绪

定义DOM,来自W3C ...

什么是文档对象模型?

文档对象模型是一个平台和语言中立的接口,它允许程序和脚本动态访问和更新文档的内容、结构和样式。

jQuery API 文档中定义.load()

。加载()

描述:将事件处理程序绑定到“加载”JavaScript 事件。

示例:当页面完全加载(包括图形)时运行函数。

$(窗口).load(函数(){

 // run code 

});


在研究了这一点和深思熟虑之后,我得出的结论是,考虑到他们的三个选择,问题的措辞是不正确的。当然,基于这种思路,由于问答题没有正确答案,所以我原来的答案也是错误的。

原始的 W3Schools jQuery 测验问题:

在文档加载完成之前,哪个 jQuery 函数用于阻止代码运行?

现在我们来分析一下原来的三个答案:

A. $(document).load()

这是我最初的答案,但在 StackOverflow 上发布这个问题后,我意识到 $(document).load() 不是有效代码,据我所知。$(window).load() 是我最初的想法。使用 $(window).load(),您将阻止代码在整个窗口加载之前执行,包括它的所有元素、图像等。

A不可能是正确的答案,因为措辞是“document.load”,但应该是“window.load”。

B. $(document).ready()

这是官方答案,它是有效的 jQuery 代码。它在 DOM 准备好但在其他任何内容完成加载之前触发。我认为您不能说“文档”已完成加载,否则“文档”和“DOM”一词将具有相同的含义并且可以互换。

B不可能是正确的答案,因为没有图像和其他资产,页面(文档)还没有完成加载。

C. $(body).onload()

C不可能是正确的答案,因为“onload()”不是 jQuery 库的一部分。

结论:

  1. 正如问题的措辞,“在文档完成加载之前,哪个 jQuery 函数用于阻止代码运行?” ,提出的三个没有正确答案。$(window).load() 应该是正确的答案,因为它指的是整个“页面”或“文档”,而不仅仅是 DOM。

  2. 接受官方的回答,“$(document).ready()”,原来的问题应该改写如下: “哪个jQuery函数用于阻止代码运行,在DOM加载完成之前?”

于 2011-04-20T21:01:31.777 回答