окно.onload vs



В чем именно разница между window.onload событие и onload событие body тег? когда я использую что и как должно быть сделано правильно?

373   13  

13 ответов:

window.onload = myOnloadFunc и <body onload="myOnloadFunc();"> различные способы использования то же самое событие. Используя window.onload менее навязчиво, хотя-это берет ваш JavaScript из HTML.

все общие библиотеки JavaScript, Prototype, ExtJS, Dojo, JQuery, YUI и т. д. обеспечьте хорошие оболочки вокруг событий, которые происходят по мере загрузки документа. Вы можете прослушивать событие onload окна и реагировать на это, но onLoad не запускается, пока все ресурсы не будут загружены, поэтому ваше событие обработчик не будет выполнен до тех пор, пока не будет извлечено последнее огромное изображение. В некоторых случаях это именно то, что вы хотите, в других вы можете обнаружить, что прослушивание, когда DOM готов, более уместно - это событие похоже на onLoad, но срабатывает без ожидания изображений и т. д. загружать.

нет никакой разницы, но вы не должны использовать.

во многих браузерах,window.onload событие не запускается, пока все изображения не будут загружены, что не то, что вы хотите. Браузеры на основе стандартов имеют событие под названием DOMContentLoaded который срабатывает раньше, но он не поддерживается IE (на момент написания этого ответа). Я бы рекомендовал использовать библиотеку javascript, которая поддерживает функцию кросс-браузера DOMContentLoaded, или найти хорошо написанную функцию, которую вы можете использовать. в jQuery $(document).ready(), это хороший пример.

window.onload может работать без тела. Создайте страницу только с тегами скрипта и откройте ее в браузере. Страница не содержит никакого тела, но он все еще работает..

<script>
  function testSp()
  {
    alert("hit");
  }
  window.onload=testSp;
</script>

Я вообще предпочитаю не использовать <body onload=""> событие. Я думаю, что это чище, чтобы держать поведение отделено от контента как можно больше.

тем не менее, есть случаи (обычно довольно редкие для меня), когда использование body onload может дать небольшой прирост скорости.

мне нравится использовать прототип, поэтому я обычно ставлю что-то вроде этого в <head> на мою страницу:

document.observe("dom:loaded", function(){
  alert('The DOM is loaded!');
});

или

Event.observe(window, 'load', function(){
  alert('Window onload');
});

выше трюки, которые я узнал здесь. Мне очень нравится концепция обработчиков событий attach за пределами HTML.

(редактировать, чтобы исправить орфографическую ошибку в коде.)

здесь нет разницы ...

Так что в принципе вы можете использовать оба (по одному !- )

но ради удобочитаемости и для чистоты html-кода я всегда предпочитаю окно.события onload !o]

window.onload - вызывается после того, как все DOM, JS файлы, изображения, Iframes, расширения и другие полностью загружены. Это равно $(window).load (function () {});

body onload="" - вызывается после загрузки DOM. Это равно $(документ).готовые(функция() {});

Если вы пытаетесь написать ненавязчивый код JS (и вы должны быть), то вы не должны использовать <body onload="">.

Я понимаю, что разные браузеры обрабатывают эти два немного по-разному, но они работают одинаково. В большинстве браузеров, если вы определяете оба, один будет проигнорирован.

подумайте о onload, как и любой другой атрибут. На поле ввода, например, вы можете поставить:

<input id="test1" value="something"/>

или вы можете позвонить:

document.getElementById('test1').value = "somethingelse";

атрибут onload работает таким же образом, за исключением того, что он принимает функцию в качестве ее значения вместо строки, как это делает атрибут value. Это также объясняет, почему вы можете "использовать только один из них" - вызов окна.выполнение переназначает значение атрибута onload для тега body.

кроме того, как и другие здесь говоря, обычно чище держать стиль и javascript отдельно от содержимого страницы, поэтому большинство людей советуют использовать окно.onload или как функция готовности jQuery.

должно переопределить окно.на нагрузке.

с

, документ.тело.onload может быть null, undefined или функцией в зависимости от браузера (хотя getAttribute("onload") должен быть несколько последовательным для получения тела анонимной функции в виде строки). С окном.onload, когда вы назначаете ему функцию, окно.onload будет функция последовательно через браузеры. Если это имеет значение для вас, используйте окно.на нагрузке.

Они оба работают одинаково. Однако обратите внимание, что если оба они определены, будет вызван только один из них. Я обычно избегаю использовать любой из них напрямую. Вместо этого можно присоединить обработчик событий к событию load. Таким образом, вы можете легко включить другие пакеты JS, которые также могут потребоваться для присоединения обратного вызова к событию onload.

любая платформа JS будет иметь кросс-браузерные методы для обработчиков событий.

это принятый стандарт, чтобы иметь содержание, макет и поведение отдельно. Так что окно.события onload() будет более подходящим для использования, чем <body onload=""> хотя оба делают ту же работу.

Если вы хотите манипулировать DOM, то определенно используйте

. таким образом, событие будет инициировано при загрузке DOM. Еще есть отставание между окном.onload событие и загрузка DOM, так что вы могли бы закончить манипулирование объектом, который не существует. я бы предложил использовать jquery и $(document).ready(function(){}). Это будет работать на лучшее

Comments

    Ничего не найдено.