Как вызвать функцию javascript из тела HTML-документа при полной загрузке страницы - PullRequest
3 голосов
/ 06 мая 2011

У меня есть некоторый javascript (код для инициализации карт Google, если вы заинтересованы), который я вынужден включить в теги <body></body> html-документа, и я хотел бы, чтобы один из моих методов запускался на страницезагрузка завершена.Проблема в том, что у меня нет доступа к тегу <body> html, поэтому я не могу сделать:

<body onload="foo()"> 

Есть ли способ сделать это?Я понимаю, что это нелепый сценарий.Спасибо!

Ответы [ 4 ]

4 голосов
/ 06 мая 2011

В зависимости от того, когда выполняется код, присоедините обработчик с помощью JavaScript:

if(window.onload) {
    var _existing = window.onload;
    window.onload = function() {
        _existing();
        foo();
    };
}
else {
    window.onload = foo;
}

Поскольку у вас, похоже, нет контроля над страницей, мы должны быть немного осторожнее.Другой JavaScript, возможно, уже установил обработчик события.Чтобы быть хорошим гражданином, мы не просто перезаписываем обработчик событий, но сохраняем ссылку на него, если он существует.

Однако другой код JavaScript может перезаписать это снова.

Лучше всего было бы использовать более совершенные методы обработки событий addEventListener (W3C) и attachEvent (IE).

Для получения дополнительной информации об обработке событий я предлагаю прочитать отличные статьи на quirksmode.org .

2 голосов
/ 06 мая 2011

Если вы используете jQuery, вы можете использовать $(document).ready:

 $(document).ready(function() {
   // put all your jQuery goodness in here.
 });

См. учебник .

2 голосов
/ 06 мая 2011
window.onload = foo;

function foo(){
  alert("page loaded!");
}
2 голосов
/ 06 мая 2011

Вы можете программно прикреплять события, используя DOM.

// Function to add event listener to body 

function addLoadFn() 
{ 
   var body = document.getElementById("body"); 
   body.addEventListener("load", myOnloadListener, false); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...