/ / Nieoczekiwane zachowanie kodu w przypadku obciążenia okna w bloku gotowego dokumentu - javascript, jquery, html, jquery-3

Nieoczekiwane zachowanie kodu w załadowaniu okna w obrębie gotowego bloku dokumentu - javascript, jquery, html, jquery-3

W JQuery <= 2.x ten kod działał, wyświetlając tekst w div po załadowaniu wszystkiego:

<!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>

W nowej wersji JQuery 3.0.0 div nie jest wyświetlany. Jeśli jednak całkowicie usunę warunek obciążenia okna, tak:

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

... to działa, lub jeśli przeniesie okno obciążenia poza dokument, gotowe w ten sposób:

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

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

... to też działa. Istnieje dokumentacja, która najwyraźniej dotyczy tego, co dzieje się w moim przykładzie tutaj, na stronie informacji o migracji / aktualizacji JQuery.

Wyjaśnienie od guru JQuery'ego byłobydoceniam, ponieważ muszę teraz zmienić wiele plików, aby uwzględnić to zachowanie, i chcę to zrobić we właściwy sposób, tak jak to miało miejsce w przeszłości. Wielkie dzięki!

Odpowiedzi:

0 dla odpowiedzi № 1

Spróbuj użyć:

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

0 dla odpowiedzi nr 2

Możesz bezpiecznie manipulować DOM w wywołaniu zwrotnym gotowym do dokumentu:

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

W tym przykładzie nie widzę potrzeby zdarzenia onload okna. Ale jeśli chcesz poczekać wszystko w oknie do załadowania możesz dodać detektor zdarzeń z dowolnego miejsca w dokumencie bez potrzeby przygotowania dokumentu:

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

0 dla odpowiedzi № 3

Dla mnie to wygląda na wyścigkod gotowy dokument i funkcja ładowania okna zostanie uruchomiona w tym samym czasie. Do czasu dołączenia detektora obciążenia okna zdarzenie to minęło. Dlaczego działa w starej jQuery? Nie wiem i nie obchodzi mnie to, ponieważ, jak zauważyli inni, nie kodowałbyś w ten sposób.

Jeśli umieścisz obraz w dokumencie, opóźnisz ładowanie i złapiesz go jako wyzwalacz.
https://jsfiddle.net/mowglisanu/13wfqdbL/

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