Еще один сомнительный ответ JQuery Quiz в W3Schools - PullRequest
2 голосов
/ 19 апреля 2011

Здесь на сайте W3Schools размещена викторина jQuery ...

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

Вопрос № 16 выглядит следующим образом,

Какая функция jQuery используется для предотвращения запуска кода до завершения загрузки документа?

а. $ (Документ) .load ()

B. $ (Документ) .ready ()

C. $ (Тело) .onload ()

Я ошибся, выбрав ответ A. (их официальный ответ - B).

Я ответил на это, думая, что я знал следующее,

  1. document.load запускается после всего на странице загружается включая все изображения

  2. document.ready срабатывает только после загрузки DOM (не обязательно загружены все изображения)

Я интерпретировал оригинальную формулировку вопроса «документ завершен загрузка», чтобы включить все (со всеми изображениями). В конце концов, я подумал, что именно поэтому они назвали это «document.load». Кроме того, чтобы их ответ был правильным, вам придется заключить, что «DOM» является эквивалентом «документа». В противном случае это кажется неправильным, зачем называть это «объектной моделью документа» (DOM) вместо «документа»?

Несмотря на утверждение W3School, что B - правильный ответ, каков действительно правильный ответ?

Спасибо за ваши мысли.

Sidenote: Цитировать мои собственные комментарии в мой другой связанный вопрос ...

«На самом деле я изучаю большую часть своего jQuery на сайте jQuery и при поиске здесь захожу в StackOverflow. В основном я играл с викториной в W3School, потому что изучал их« предпосылки »для jQuery Сертификация. Я не считаю себя экспертом jQuery, но я легко набрал 95% (19/20) в их викторине. Видя неправильную формулировку в этом ответе, я решил подтвердить то, что я уже подозревал, разместив здесь сообщение. Мое мнение об этих видах сертификации сейчас меняется. "


EDIT:

Я уведомил W3Schools о существовании этой темы.


РЕДАКТИРОВАТЬ 2:

Когда я ответил на исходный вопрос теста, я подумал о $ (window) .load (), поэтому мой ответ на вопрос был явно неверным. Я считаю, что этот факт не оставляет ни одного из трех вариантов множественного выбора в качестве правильного ответа. Смотрите мой подробный ответ ниже.

Ответы [ 2 ]

5 голосов
/ 19 апреля 2011

Вопрос является неоднозначным.

Правильный ответ зависит от вашего определения document .Если это DOM, это был бы B. Если бы это были ресурсы всей страницы, это было бы $(window).load(function() { ... }).

Как видите, этот тест отстой.

2 голосов
/ 21 апреля 2011

Из документации jQuery API ...

.ready ()

Описание: Укажите функцию для выполнить, когда DOM полностью загружен. В то время как JavaScript обеспечивает событие загрузки для выполнения кода, когда страница отображается, это событие не срабатывать, пока все активы, такие как изображения были полностью получены. В большинстве случаев скрипт можно запустить как только иерархия DOM будет полностью построена .

Подробнее о jQuery Ready

Определение DOM , от W3C ...

Что такое объектная модель документа?

Объектная модель документа является не зависит от платформы и языка интерфейс, который позволит программам и скрипты для динамического доступа и обновить содержание, структуру и стиль документов.

Определение .load () из документации jQuery API

.load ()

Описание: Привязать обработчик события к событию «load» JavaScript.

Пример: Запуск функции при полной загрузке страницы , включая графика.

$ (окно) .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.

Вывод (ы):

  1. Если сформулировать вопрос, «Какая функция jQuery используется для предотвращения запуска кода до завершения загрузки документа?» , из трех представленных ответов нет правильного ответа. $ (window) .load () должен быть правильным ответом, поскольку он относится к «странице» или «документу» в целом, а не только к DOM.

  2. Чтобы принять официальный ответ, "$ (document) .ready ()" , исходный вопрос следует переписать следующим образом: "Какая функция jQuery используется для запретить запуск кода до завершения загрузки DOM? "

...