Потрібно $ (документ)?


111

Я бачив це запитання в stackoverflow, але не відчуваю, що на нього відповіли зовсім.

Чи $(document).readyпотрібно?

Я пов'язую всі свої javascripts внизу сторінки, тому теоретично вони все запущені після того, як документ буде готовий у будь-якому випадку.


3
Старі браузери можуть не користуватися паралельним завантаженням, яке використовують новіші браузери. Ось головне мотивування ваших сценаріїв розміщено внизу. Це спеціально дозволяє виводити ваші HTML та CSS спочатку на старих браузерах. На цьому етапі у вас є вибір щодо того, як ви хочете дізнатись, що DOM завантажений. Два популярні способи виходу з вашого js - це window.onload & $ (document) .ready (спільно з jQuery). Є й інші варіанти, які легко шукати, очевидні недоліки для windows.onload. Суть у $ (document). Вже працює частіше, ніж ні & проста у використанні.
BradChesney79

Відповіді:


125

Чи $(document).readyпотрібно?

немає

якщо ви розмістили всі свої сценарії прямо перед </body>закриваючим тегом, ви зробили точно те саме.

Крім того, якщо скрипт не потребує доступу до DOM, це не має значення, де він завантажений понад можливі залежності від інших сценаріїв.

У багатьох CMS-файлах у вас немає великого вибору місця завантаження скриптів, тому для document.readyподії добре використовувати модульний код . Ви дійсно хочете повернутися назад і налагодити старий код, якщо повторно його використовувати в іншому місці?

не по темі:

Як бічна примітка: ви повинні використовувати jQuery(function($){...});замість того, $(document).ready(function(){...});як це примушує псевдонім до $.


Ви впевнені, що це "точно та ж річ"? У мене склалося враження, що ваш css (або інший код, завантажений паралельно з основним html), можливо, ще не повністю проаналізований.
Zach Lysobey

6
@ZachL, документ може бути готовий до повного розбору CSS. document.ready - це не те саме , що onloadподія, де завантаження зображень та інших зовнішніх ресурсів закінчено.
zzzzBov

Дякуємо за роз’яснення.
Зах Лісобей

5
Це "ні" просто коштувало мені 3 години роботи .. просто переконайтеся, що ви не помилитесь </body> з <body> :)
teejay

1
Я не обов'язково погоджуюся з примусовим псевдонімом, особливо якщо це noConflict()потрібно використовувати з якихось причин.
Джей Бланшард

22

Ні, якщо ваш JavaScript останнє перед закриттям, вам не потрібно буде додавати ці теги.

В якості бічної примітки, кодом нижче є стенограма для $ (документ).

$(function() {
// do something on document ready
});

Це питання може бути хорошим. Ви це читали? jQuery: Навіщо використовувати document.ready, якщо зовнішній JS внизу сторінки?


6
По суті питання: "Чи потрібен мені документ готовий взагалі, коли я кладу свої сценарії в нижній частині тіла?", А не "Чи існує спосіб швидкого написання $(document).ready()".
nnnnnn

4

Ні, це не потрібно, якщо ви знаєте, що у вас немає жодних відкладених речей - і в більшості випадків ви будете знати, чи розробили ви над тим, над чим працюєте зверху вниз.

- Це коли ви вносите чужий код, не ретельно перевіряючи його, ви не знаєте.

Отже, запитайте себе, чи використовуєте ви рамку чи редактор, який допомагає вам у структурі? Ви вводите чужий код, і ви не переймалися читати кожен файл? Чи готові ви пройти тестування свого коду через операційну систему, браузер та версію браузера? Вам потрібно видавити кожну унцію швидкості зі свого коду?

document.ready () робить багато таких питань нерелевантними. document.ready () був покликаний полегшити ваше життя. Він приходить в невеликий (і я смію сказати прийнятним) хіт виступу.


Щось я побачив - одну з ваших редагувань відхилили, але мені це здається прекрасною. Ви можете повторно надіслати це: stackoverflow.com/review/sugges-edits/3224385
Qantas 94 Важкий

1

В Інтернеті я бачив посилання / дописи в блозі щодо використання jquery document.ready. На мою думку, обидва його використання або розміщення всіх ваших javascript внизу сторінки є дійсними. І тепер питання було б, що було б краще? Це лише питання стилю програмування.


0

Ні, не потрібно. Ви можете або поставити тег скрипту прямо перед тегом закриття тіла, або якщо ви підтримуєте IE9 +, ви можете використовувати нативний JS.

<script>alert('DOM Loaded!');</script>
</body>

<script>
document.addEventListener("DOMContentLoaded", function(event) { 
      // DOM has loaded ready to fire JS scripts
    });
</script>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.