/ / Неочаквано поведение на кода в натоварването на прозореца в блока готов за документи - javascript, jquery, html, jquery-3

Неочаквано поведение на кода в зареждането на прозореца в рамките на готовия блок - javascript, jquery, html, jquery-3

С JQuery <= 2.x, този код работи, показвайки текста в div след като всичко беше натоварено:

<!DOCTYPE html>
<html>
<head>
<title>JQuery 3 Window onload test</title>
</head>
<body>
<div id="my_div" style="visibility:hidden">Greetings!</div>
<script src="jquery.js"></script>
<script>
$(function () {
$(window).on("load", function () {
$("#my_div").css("visibility", "visible");
});
});
</script>
</body>
</html>

С новия JQuery 3.0.0, div не се показва. Ако обаче премахна напълно условието за зареждане на прозореца, както следва:

$(function () {
$("#my_div").css("visibility", "visible");
});

... тогава работи, или ако преместя прозореца на зареждане извън документа, готов по следния начин:

$(function () {
// other things I need to do once the document is ready
});

$(window).on("load", function () {
$("#my_div").css("visibility", "visible");
});

... тогава тя също работи. Има документация, която очевидно се отнася до това, което се случва в моя пример тук, на страницата за информация за миграция / обновяване на JQuery.

Изясняване от JQuery гурута ще бъдетъй като сега трябва да преработим много файлове, за да се приспособим към това поведение и искам да го направя по правилния начин с очакваното поведение, което се случва както в миналото. Много благодаря!

Отговори:

0 за отговор № 1

Опитайте да използвате:

$(document).ready(function(){
$("#my_div").css("visibility", "visible");
});

0 за отговор № 2

Можете безопасно да манипулирате DOM в готовността за обновяване на документ:

$(function() { // or $(document).ready(), they are equivalent
$("#my_div").css("visibility", "visible");
});

В този пример не виждам необходимост от събитие при зареждане на прозореца, но ако искате да чакате всичко в прозореца за зареждане можете да добавите слушателя на събитието от всяка точка на документа, без да е необходима готовност за документи:

$(window).on("load", function() {
$("#my_div").css("visibility", "visible");
});

0 за отговор № 3

Това ми се струва като условие за състезание във вашетокод готов документ и функция за зареждане на прозореца ще се задейства едновременно. Така че, докато прикачите слушател на натоварване на прозореца, това събитие щеше да изтече. Защо работи в стария jQuery? Не знам и не ми пука, защото, както изтъкнаха другите, няма да кодирате така.

Ако поставите изображение в документа, ще забавите товара и ще го хванете.
https://jsfiddle.net/mowglisanu/13wfqdbL/

<img src="/images/http://placehold.it/300x300">