La función de carga corporal no funciona en mi ejemplo (JavaScript)

Nov 01 2020

Estoy escribiendo un programa para encontrar la secuencia de ejecución de document.ready, window.onload, body.onload , pero por alguna razón mi body.onload no muestra console.log. ¿Por qué?

$(document).ready(function(){
    console.log('document is ready now ...');
});

window.onload = () => {
    console.log('window is loaded...');
}

function bodyOnload() {
    console.log('body is loaded...');
}
<html>

<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>

<body onload="bodyOnload()">

<h1>Hello ...</h1>

</body>

</html>

Respuestas

1 web-sudo Nov 02 2020 at 06:08

Te voy a contar el motivo con algunos casos de ejemplo ...

<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
    $(document).ready(function(){
        console.log('document is ready now ...');
    });

    window.onload = () => {
        console.log('window is loaded...');
    }

    function bodyOnload() {
        console.log('body is loaded...');
    }
</script>
</head>
<body onload="bodyOnload()">
<h1>Hello ...</h1>
</body>
</html>

Como puede ver, window.onload no funciona en el caso anterior. Pero en el siguiente caso, puede ver que body.onload no funciona.

<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body onload="bodyOnload()">
<h1>Hello ...</h1>
<script>
    $(document).ready(function(){
        console.log('document is ready now ...');
    });

    window.onload = () => {
        console.log('window is loaded...');
    }

    function bodyOnload() {
        console.log('body is loaded...');
    }
</script>
</body>
</html>

Entonces, incluso si escribe el por separado, no funcionará. En general, esos no pueden trabajar juntos. ¿Por qué? window.onload significa que el cuerpo ya está cargado y body.onload también significa que la ventana ya está cargada. ya que el motivo, en caso de que uno de los dos sea llamado, el otro será ignorado.