webentwicklung-frage-antwort-db.com.de

Javascript wird in Body-Onload mit 2 Funktionen geladen

Ich versuche, 2 Javascript-Ereignisse/-Funktionen wie folgt in den Body-Onload zu laden: -

<body onLoad="getSubs(document.form1.HotelID.options[document.form1.HotelID.selectedIndex].value);getTags(document.form1.HotelID.options[document.form1.HotelID.selectedIndex].value);">

Wann immer ich mit 2 Funktionen lade, bricht die erste ab - aber wenn ich nur die eine lade, funktioniert sie einwandfrei - mache ich etwas falsch? Ist es nicht möglich, 2 Funktionen innerhalb des Onloads zu speichern?

7
Paul Clubs

versuche dies:

<html>
<head>
<script language="javascript">
function func1(){
    //the code for your first onload here
    alert("func1");
}
function func2(){
    //the code for your second onload here
    alert("func2");
}
function func3(){
    //the code for your third onload here
    alert("func3");
}
function start(){
    func1();
    func2();
    func3();
}
</script>
</head>
<body onload="start()">
</body>
</html>

Mehrere onload

12
Ashwini Verma

Machen Sie es stattdessen mit einem Java-Skript. Einer der in einem Kommentar freigegebenen Links erklärt gut, warum es am besten ist, diesen Ansatz für Inline-Attribute zu verwenden.

<head>
<script>
document.body.onload = function() {
getSubs(...);
getTags(...);
};
</script>
</head>
<body>
...
</body>
8
GillesC

Ich würde um jeden Preis vermeiden, inline javascript zu haben , das haben Sie im Code Ihrer Frage getan: Fügen Sie Javascript in ein HTML-Attribut ein.


Best Practice ist es, Ihr Javascript in einer separaten Datei hinzuzufügen, siehe die entsprechende Frage zu diesem Prinzip Was ist unauffälliges Javascript in Laienbegriffen?

Sie hätten also eine andere Datei mit dem Namen "myjsfile.js", die Sie dann von Ihrer HTML-Seite aus referenzieren

<script src="./path/to/your/myjsfile.js"></script>

Hier finden Sie die Antwort, wo diese Referenz platziert werden soll: Wo soll Javascript in einer HTML-Datei platziert werden?

Ihre "myjsfile.js" -Datei hätte einfach Folgendes:

window.onload =  function(){
    getSubs(...);
    getTags(...);
};

Eine weitere Sache, die Sie vermeiden sollten: Fügen Sie Javascript innerhalb derselben HTML-Datei hinzu. Der Grund basiert auch auf dem gleichen Prinzip von unobstrusive javascript. Was ist unauffälliges Javascript in Laienbegriffen?

Aber ich denke, es gibt Eckfälle, in denen Sie dies vielleicht tun möchten.

Wenn Sie wirklich müssen, verwenden Sie window.onload anstelle des Inline-Javascript onload="...". Sehen Sie, warum hier window.onload vs <body onload = "" />

Fügen Sie Ihrer HTML-Datei einfach Folgendes hinzu:

<script type="text/javascript">
    window.onload =  function(){
        getSubs(...);
        getTags(...);
    };
</script>

Hier ist die Antwort, wo dieser Code abgelegt werden soll: Wo soll Javascript in einer HTML-Datei platziert werden?

Hinweis: Ja, an derselben Stelle, an der Sie den Verweis auf eine externe Javascript-Datei setzen würden


Eine andere Sache: Ich weiß nicht, wo Ihre Funktionen getSubs() und getTags() definiert sind. Wenn Sie jedoch möchten, dass Ihr Code funktioniert, müssen diese Funktionen aufgerufen werden, nachdem die Datei (oder ein Teil von Javascript), die sie definiert, geladen wurde.

Kurz gesagt: Stellen Sie sicher, dass in der Javascript-Datei, die die Definitionen von getSubs() und getTags() enthält, auf vor Ihren Code verwiesen wird.

2
Adrien Be

Sie können eine neue JS-Funktion erstellen, die den Parameter document.form1.HotelID.options [document.form1.HotelID.selectedIndex] .value akzeptiert und die beiden Funktionen in der neu erstellten Funktion aufruft. 

Ich habe versucht, zwei Funktionen mit dem folgenden Code aufzurufen, und es hat gut funktioniert.

<html>
    <body onload="callStart();callAgain();">
        <script type="text/javascript">
            function callStart() {
                alert('First');
            }
            function callAgain() {
                alert('Again');
            }
        </script>
    </body>
</html>
0
Krishna