Как вызвать функцию JavaScript при загрузке страницы?


244

Традиционно, чтобы вызвать функцию JavaScript после загрузки страницы, вы должны добавить onloadатрибут к телу, содержащий немного JavaScript (обычно только вызов функции)

<body onload="foo()">

Когда страница загрузится, я хочу запустить некоторый код JavaScript для динамического заполнения частей страницы данными с сервера. Я не могу использовать onloadатрибут, так как я использую фрагменты JSP, у которых нет bodyэлемента , к которому я могу добавить атрибут.

Есть ли другой способ вызвать функцию JavaScript при загрузке? Я бы предпочел не использовать jQuery, так как я не очень знаком с ним.


15
кстати: это Javascript; Java - это язык, а Javascript - другой. Нет такого понятия, как сценарий Java. К вашему сведению
— Яник Рошон

Можете ли вы подтвердить, что Кевин редактирует ваш вопрос, все еще задает тот же вопрос, или перефразировать его, чтобы мы поняли? (Вы пытаетесь найти альтернативу onload?)
— STW

Ответы:


388

Если вы хотите, чтобы метод onload принимал параметры, вы можете сделать что-то похожее на это:

window.onload = function() {
  yourFunction(param1, param2);
};

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


И теперь, когда я динамически включаю сгенерированную сервером страницу и нуждаюсь в DOM-готовности, мне нужно пройти через это минное поле. Если бы только кто-то поощрил должным образом пользователя библиотеки раньше.
— Стефан Кендалл

4
Я не сказал, что это хорошая идея. Хотя ведущий разработчик, где я работаю, имеет сильный синдром «Не изобретено здесь», и я не смог убедить его использовать jquery, за исключением нескольких страниц.
— Мэтт Зикер

2
Тогда, возможно, вам следует сменить место работы. Если правильный инструмент для работы не тот инструмент, который вы используете, зачем бить головой о стену, постоянно сражаясь с некомпетентными?
— Стефан Кендалл

И можно ли во второй раз вызвать ту же функцию с помощью события onclick on button?
— Файзан

73

Другой способ сделать это - использовать прослушиватели событий, вот как вы их используете:

document.addEventListener("DOMContentLoaded", function() {
  you_function(...);
});

Объяснение:

DOMContentLoaded Это означает, что когда объекты DOM документа полностью загружены и видны в JavaScript, это также может быть «щелчок», «фокус» ...

function () Анонимная функция, будет вызываться при возникновении события.


5
Обратите внимание, что это не будет работать в IE 8 и ниже. В противном случае это лучшее решение для чистого JS!
— Филипп

46

Ваш первоначальный вопрос был неясен, при условии, что редактирование / интерпретация Кевина верны, тогда этот первый вариант не применим

Типичные варианты использования onloadсобытия:

<body onload="javascript:SomeFunction()">
....

Вы также можете разместить свой javascript в самом конце тела; он не начнет выполняться, пока документ не будет готов.

<body>
  ...
  <script type="text/javascript">
    SomeFunction();
  </script>
</body>

И еще один вариант - рассмотреть возможность использования инфраструктуры JS, которая по сути делает это:

// jQuery
$(document).ready( function () {
  SomeFunction();
});

В javascript:этом нет onloadнеобходимости, хотя и не вредно.
— icktoofay

@STW <script type="text/javascript">LoadResult();</script>даетUncaught ReferenceError: LoadResult is not defined
— Gunasegar

37
function yourfunction() { /* do stuff on page load */ }

window.onload = yourfunction;

Или с помощью jQuery, если вы хотите:

$(function(){
   yourfunction();
});

Если вы хотите вызвать более одной функции при загрузке страницы, посмотрите эту статью для получения дополнительной информации:


3
Это неверно, функция будет выполняться и присваивать все, что вернет, для загрузки. () Не должно быть там.
— epascarello

1
Если есть другие функции, которые прослушивают событие onload, это уничтожит их. Лучше добавить прослушиватель событий, чем назначать обработчик событий напрямую. Даже в этом случае вы можете назначить его как `window.onload = yourfunction 'без закрытия функции, а не так, как вы это делаете. Ваш путь стремится выполнить вашу функцию () во время назначения.
— Робусто

это присвоит возвращаемое значение функции для window.onload, которое не будет работать, если только возвращаемое значение не является функцией.
— I.devries

@epascarello: Исправлена ​​ошибка, вы заметили привычку при написании имен функций. Спасибо
— Сарфраз

1
window.onload = ваша функция; Проблема с этим способом заключается в том, что он не принимает параметр функции !!
— ПалАлаа

8

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript">
        function codeAddress() {
            alert('ok');
        }
        window.onload = codeAddress;
        </script>
    </head>
    <body>
    
    </body>
</html>


3
Я думаю, что его ответ ясен, так как вы можете видеть, что скрипт помещен в тег head, что позволяет ему выполняться до содержимого тела ... или, скажем, предварительно загрузить его функции или что-то еще .. иногда человек задает вопросы, потому что он не вообще не знаю, но это никогда не тот случай, когда кто-то будет кормить вас ложкой, и никто в этом сообществе не будет, вам придется самим искать что-то еще. # Особенно_that_you
— are_a_web_developer

8

Вы должны вызвать функцию, которую хотите вызвать при загрузке (т. Е. При загрузке документа / страницы). Например, функция, которую вы хотите загрузить, когда загрузка документа или страницы называется «yourFunction». Это можно сделать, вызвав функцию загрузки события документа. Пожалуйста, смотрите код ниже для более подробной информации.

Попробуйте код ниже:

<script src="js/jquery-1.11.0.min.js" type="text/javascript"></script>
<script type="text/javascript">

    $(document).ready(function () {
        yourFunction();
    });
    function yourFunction(){
      //some code
    }
</script>

6

вот трюк (работает везде):

r(function(){
alert('DOM Ready!');
});
function r(f){/in/.test(document.readyState)?setTimeout('r('+f+')',9):f()}

1

Для обнаружения загруженного HTML (с сервера), вставленного в DOM, используйте MutationObserverили определяйте момент в вашей функции loadContent, когда данные готовы к использованию

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.