2012-03-28 10 views
4

Betrachten Sie das folgende HTML-Schnipsel mit einigen Javascript unter Verwendung prompt und unload. Die prompt() Methode funktioniert gut, aber ich möchte etwas wie Auf Wiedersehen, Benutzer beim Neuladen oder Verlassen der Seite. Jede Hilfe wird sehr geschätzt.Javascript ontload und onunload

<body onload="promptName()" > 


     <script type="text/javascript"> 
     function promptName() 
     { 
      var userName = prompt("What's your name ?", "") 
      return userName; 
     } 

     function goodBye() 
     { 
      alert("Goodbye, " + promptName() + "!"); 
     } 

     window.onunload = goodBye(); 

     </script> 

    </body> 
+0

Gegen welchen Browser testen Sie? Gemäß dem MDN verhält sich onbeforeunload in verschiedenen Browsern unterschiedlich: https://developer.mozilla.org/en/DOM/window.onbeforeunload –

+0

Chrome und IE8 Browser – George

Antwort

10

Sie sollten es so schreiben:

window.onunload = goodBye; 

Auch Sie sich anschauen sollten die onbeforeunload Ereignis in einigen Browsern:

window.onbeforeunload = goodBye; 

Wenn du schreibst e window.onunload = goodBye(); Sie weisen den von goodBye zurückgegebenen Handler dem unload Ereignis zu. Da nichts zurückgegeben wird, gibt es keinen Event-Handler. Sie müssen die Funktion verweisen, statt: window.onunload = goodBye;

+3

Gutes Auge, David.+1 –

1
<body onload="promptName()" > 


     <script type="text/javascript"> 
     function promptName() 
     { 
      var userName = prompt("What's your name ?", "") 
      return userName; 
     } 



     window.onbeforeunload = function() { 
    alert("Goodbye, " + promptName() + "!"); 
} 
     </script> 

    </body> 

onbeforeunload

+0

Aber es gibt Auf Wiedersehen Nachricht kurz nach der Aufforderung den Namen; Ich möchte diese Abschiedsnachricht nach F5 oder klicken Sie auf Schließen Symbol – George

+0

@George meine Antwort sehen, sollten Sie die Funktion verweisen, nicht ausführen. – David

+0

Aktualisierte Antwort über – PraveenVenu

1

Als HERE

window.onbeforeunload = function() { 
    alert("Goodbye, " + promptName() + "!"); 
}; 

gesehen oder

window.onbeforeunload = goodBye; 

Obwohl ich würde vorschlagen, den Benutzernamen zu einer glob sparen, indem eine var seting außerhalb Sie func laden, erhält den Benutzernamen nach der ersten Aufforderung, dann müssen Sie sie nicht erneut nach ihrem Namen fragen, wenn sie

1

Sie verlassen d:

var userName = ""; 

function promptName() 
{ 
    userName = prompt("What's your name ?", "") 
    return userName; 
} 

function goodBye() 
{ 
    alert("Goodbye, " + userName + "!"); 
} 

window.onload=promptName();  
window.onbeforeunload = goodBye(); 
+0

Prompt funktioniert gut, Problem ist, dass ich auf Wiedersehen Nachricht nach dem Klicken auf die Schaltfläche schließen möchte. Dieser Code gibt Auf Wiedersehen Nachricht nur nach Aufforderung, egal ob onunload() oder onbeforeunload() – George

+0

es war nur, um Ihnen das Ereignis zu zeigen. Sie müssen Ihren Code wie diese Funktion ändern. goodBye() { return ("Auf Wiedersehen," + userName + "!"); } – hennson

3

Sie können diesen Weg nicht verwenden: window.onunload = goodBye();

Wenn Sie auf diese Weise assing wollen haben Sie drei Möglichkeiten:

// by this way you use the name of the function, so you override the onunload function with goodBye function 
window.onunload = goodBye; 

oder

// This way you redefine the function 
    window.onunload = function(){goodBye()}; 

Und mein Favorit, weil es Ihnen erlaubt, mehr Funktionalität hinzuzufügen:

// This way you create a event listener which allows you to add as many functions as you ant 
window.addEventListener("unload", goodBye, false); 
+0

Nur eine Anmerkung: Das letzte Beispiel bricht IE-Versionen unter 9. – David

+0

Welches Beispiel? 1,2,3? –

+0

'addEventListener' ist in IE8- – David

0

Das funktioniert für mich, aber die akzeptierte Antwort nicht. Dies unterstützt auch mehr Browser-Ereignisse.

Dies kann auch zusammen mit verschiedenen onbeforeunload und beforeunload Skripten verwendet werden.

var doOnUnload = window.attachEvent || window.addEventListener; 
var eventType = window.attachEvent ? 'onunload' : 'unload'; 

doOnUnload(eventType, function(e) 
{ 
    console.log('godbye'); 
});