W3Schools的另一个有问题的jQuery测验答案

在W3Schools网站上发布了一个jQuery测验…

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

问题#16如下,

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

A. $(文件).load()

B. $(文件).ready()

C. $(正文).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通报了这个post的存在。


编辑2:

当我回答原始测验问题时,我在考虑$(window).load(),因此我的测验答案明显不正确。 我相信这个事实不会让三个多项选择都没有作为正确的答案。 请参阅下面的详细答案。

这个问题含糊不清。

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

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

来自jQuery API文档 ……

。准备()

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

更多关于jQuery Ready的信息

从W3C定义DOM ……

什么是文档对象模型?

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

从jQuery API文档定义.load()

。加载()

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

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

$(window).load(function(){

  // run code 

});


在研究了这个和很多的思考之后,我得出的结论是,鉴于他们的三个选择,问题的措辞是不正确的。 当然,基于这种思路,由于测验问题没有正确答案,我原来的答案也是错误的。

最初的W3Schools jQuery测验问题:

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

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

A. $(文件).load()

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

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

B. $(文件).ready()

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

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

C. $(正文).onload()

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

结论(S):

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

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