Привязать событие javascript к загрузке страницы

У меня есть aspx, в котором выполняется следующая функция javascript во время события onload тела.

<body onload="startClock();">

Однако я настраиваю aspx для использования главной страницы, поэтому тег body больше не существует в aspx. Как мне зарегистрировать функцию startClock для запуска при попадании на страницу и по-прежнему использовать главную страницу?


person Jagd    schedule 03.06.2009    source источник


Ответы (5)


Если вы не хотите явно назначать window.onload или использовать фреймворк, подумайте:

<script type="text/javascript">
function startClock(){
    //do onload work
}
if(window.addEventListener) {
    window.addEventListener('load',startClock,false); //W3C
} else {
    window.attachEvent('onload',startClock); //IE
}
</script>

http://www.quirksmode.org/js/events_advanced.html

person Corbin March    schedule 03.06.2009
comment
+1 - Мне было лень набирать этот ответ, но я бы посоветовал кому-то сделать это так же, с теми же предположениями, которые вы изначально заявили. - person Jason Bunting; 03.06.2009
comment
Конечно, я бы немного абстрагировался от деталей - надеюсь, это очевидно для ОП ... - person Jason Bunting; 03.06.2009
comment
Должно быть, я упускаю что-то действительно очевидное, но где же блок кода if? Вы не можете просто сбросить это в теге ‹script›, не так ли? - person Jagd; 04.06.2009
comment
Вы можете вставить все это в тег скрипта. Я обновил свой ответ, чтобы отразить это. Это заставит выполнение логики «если» при анализе сценария, чтобы событие startClock было готово к загрузке. - person Corbin March; 04.06.2009
comment
Простой и удобный способ сделать это. Спасибо. - person Jagd; 04.06.2009
comment
Что делать, если document.attachEvent имеет значение null? - person Josh Stodola; 04.06.2009
comment
Поскольку браузеры, отличные от MS, довольно хорошо реализуют рекомендации W3C DOM Level 2, «else» существует только для IE. Как упоминал Джейсон, мы могли бы (должны) абстрагироваться от деталей, и, пока мы находимся на этом, мы могли бы добавить осторожность (это браузер, который не поддерживает ни одну модель регистрации событий, эта функция уже зарегистрирована, и т. Д.). В своем примере я выбрал простоту. Стоит отрицательный голос? Я не знаю. - person Corbin March; 04.06.2009
comment
В Chrome document.addEventListener не работал, но window.addEventListener работал. - person fabb; 05.08.2011

Вставьте это в любое место в теле страницы:

<script type="text/javascript">
window.onload = function(){
    //do something here
}
</script>
person Gabriel Hurley    schedule 03.06.2009
comment
Единственная проблема с этим заключается в том, что другой код, также помещенный на составную страницу, делает то же самое - последним в выигрыше. Переопределение window.onload работает, но следует позаботиться о том, чтобы он еще не был определен! - person Jason Bunting; 03.06.2009
comment
Я видел код, который проверяет, определен ли window.onload, и если да, то ссылается на него во временной переменной, а затем вызывает эту переменную из new window.onload. - person Alan H.; 03.08.2011

Самый чистый способ - использовать фреймворк javascript, например jQuery. В jQuery вы можете определить функцию при загрузке следующим образом:

$(function() {
    // ...
});

Или, если вам не нравится короткий стиль $();:

$(document).ready(function() {
    // ...
});
person ThiefMaster    schedule 10.05.2010
comment
Согласованный. На самом деле я начал использовать jQuery через несколько месяцев после публикации этого вопроса (почти год назад), и мне это нравится. - person Jagd; 12.05.2010
comment
Более новые версии jQuery требуют стиля $ (document) .ready (...). - person Doug Domeny; 24.06.2011
comment
Нет. В версиях never поведение $() менялось, но $(some_function) не менялось. - person ThiefMaster; 24.06.2011

Page.ClientScriptManager.RegisterStartupScrip(this.GetType(), "startup", "startClock();", true);

или используя прототип

document.observe("dom:loaded", function() {
  // code here
});
person George    schedule 03.06.2009
comment
Я так понимаю, вы имеете в виду RegisterClientScriptBlock? - person Philipp Michalski; 14.09.2020

window.addEventListener("load", function() {
    startClock();
}

Это вызовет функцию startClock при загрузке страницы.

person Kartikeya_M    schedule 06.03.2019