Не могу запустить функцию (создать элемент) при загрузке страницы - PullRequest
0 голосов
/ 21 сентября 2019

Я использую window.onload(), чтобы создать новый div с текстом внутри него.Это работает, если я добавлю его к кнопке (onclick), но не будет срабатывать, когда я использую его с window.onload().У меня есть другие window.onload в том же файле js, который работает хорошо. Есть идеи, как я могу это исправить и в чем проблема?

Мой код:

function addDate() {
    var addDiv = document.createElement('div');
    addDiv.innerHTML = "test";
    document.getElementById('date').appendChild(addDiv);
}
window.onload = addDate();

Ответы [ 4 ]

3 голосов
/ 21 сентября 2019

1) При связывании вы можете привязать только один метод к событию.Вам нужно добавить прослушиватель событий для того, что вы хотите.

window.addEventListener("load", function() { alert("hello!");});

Установка метода непосредственно для события onload заменит любой ранее присоединенный метод.Но если вы вместо этого используете прослушиватели, многие из них могут быть связаны с событием.

2) Если вы закомментируете загрузку во внешнем файле, когда вызывается document.getElementsByClassName ("bar"),ваш документ еще не готов, тогда он вернет 0 элементов.

3) Используйте addEventListener, как я объяснил в первом пункте.Если вы примените это в обоих местах, оно будет работать как шарм.

, если вы хотите больше информации об window.onload, посмотрите это здесь

2 голосов
/ 21 сентября 2019

Когда вы говорите "У меня есть до другого window.onload в том же файле js", я предполагаю, что вы имеете в виду "У меня есть два другие ...", и этобыла бы проблема прямо здесь.

Если вы скажете:

window.onload = doThis;
window.onload = doThat;

Только doThat будет вызван.Кроме того, обратите внимание ... без скобок!Это window.onload = doThat, НЕ window.onload = doThat().

Если вы используете:

window.addEventListener('load', addDate);

Тогда вы можете заставить функцию вызываться, а не портить другиевызываемые функции.

0 голосов
/ 22 сентября 2019

Спасибо всем, проблема была в том, что я использовал window.onload два раза в своем коде.И решение, как вы все сказали, было вместо этого использовать window.addEventListener.Я также удалил паратезы.

Так что для тех, кто сталкивается с такой же проблемой, используйте window.addEventListener, чтобы вместо этого вызывать код.Нравится:

window.addEventListener('load', databaseToNewElement);
window.addEventListener('load', addDate);
0 голосов
/ 21 сентября 2019

Я бы предложил вам использовать такую ​​библиотеку, как jQuery, для работы с JavaScript.С такими проблемами справиться гораздо проще.При инициализации используется функция ready .

$(document).ready(function() {
    addDate()
});

Вы можете добавить столько вызовов ready(), сколько вам нужно (по одному на сценарий).

В разделеКапот, как уже упоминалось, будет использовать window.addEventListener(<event name>, <inline function>).Поэтому мы добавили немного кода, все будет немного медленнее, но у вас будет код, который работает намного быстрее.

...