W3Schools的另一个有问题的jQuery Quiz答案

时间:2011-04-19 02:43:43

标签: jquery dom document-ready

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

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

问题#16如下,

  

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

     

一个。 (文档)$ .load()

     

B中。 $(文件)。就绪()

     

℃。 $(体).onload()

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

我回答说,以为我知道以下内容,

  1. 在页面上的一切

  2. 之后>
  3. document.ready只在加载DOM后才会触发(不一定是所有图像都已加载)

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

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

    谢谢你的想法。

    旁注:my other related question中引用我自己的评论......

    “我实际上在jQuery网站上学习了大部分jQuery,并且当我遇到困难时在StackOverflow上搜索。我主要是在W3School上进行测验,因为我正在调查他们对jQuery的”先决条件“认证。我不认为自己是一名jQuery专家,但我很容易在他们的测验中得到95%(19/20)。看到答案中的不正确措辞,我想我会在这里发帖确认我已经怀疑的内容。我对这类认证的看法正在转变。“


    修改

    我已通知W3Schools这个帖子的存在。


    编辑2:

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

2 个答案:

答案 0 :(得分:5)

问题 不明确。

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

正如你所看到的,这个测验很糟糕。

答案 1 :(得分:2)

来自jQuery API documentation ...

  

<强>。就绪()

     

说明:指定要执行的功能   在 DOM 完全执行时执行   加载。虽然JavaScript提供了   加载事件以执行代码时a   页面呈现,此事件不会   获得触发,直到所有资产如   图像已被完全接收。   在大多数情况下,可以运行脚本   一旦DOM层次结构完全构建

More about jQuery Ready

W3C ...

中定义 DOM
  

什么是文档对象模型?

     

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

jQuery API documentation

定义 .load()
  

<强> .load()

     

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

     

示例:在网页完整加载时运行功能包括   图形。

     

$(window).load(function(){

 // run code 
     

});


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

最初的W3Schools jQuery测验问题:

  

使用哪个jQuery函数   在此之前阻止代码运行   文件已完成加载?

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

  

一个。 (文档)$ .load()

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

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

  

B中。 $(文件)。就绪()

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

B 无法正确答案,因为没有图片和其他资源,页面(文档)尚未完成加载。

  

℃。 $(体).onload()

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

<强>结论(S):

  1. 正如问题所示,“在文档加载完成之前,使用了哪个jQuery函数来防止代码运行?”,没有正确答案。 $(window).load()应该是正确的答案,因为它指的是“页面”或“文档”作为一个整体,而不仅仅是DOM。

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