2012-03-28 4 views
4

Рассмотрите следующий фрагмент HTML, содержащий некоторые javascript, используя prompt и unload. Метод prompt() работает нормально, но я хочу предупредить что-то вроде До свидания, пользователь при перезагрузке или выходе из страницы. Любая помощь приветствуется.Javascript onload и 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

В каком браузере вы тестируете? Согласно MDN, onbeforeunload ведет себя по-разному в разных браузерах: https://developer.mozilla.org/en/DOM/window.onbeforeunload –

+0

Chrome и браузеры IE8 – George

ответ

10

Вы должны написать это:

window.onunload = goodBye; 

Кроме того, вы можете рассмотреть возможность использования события onbeforeunload в некоторых браузерах:

window.onbeforeunload = goodBye; 

When вы пишете e window.onunload = goodBye(); вы назначаете любой обработчик, который возвращается с goodBye, на событие unload. Поскольку ничего не возвращается, обработчик события не будет. Вы должны ссылаться на функцию вместо: window.onunload = goodBye;

+3

Хороший глаз, Дэвид.+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

Но он дает прощальное сообщение сразу после запроса имени; Я хочу это прощай сообщение после F5 или щелкнув значок закрытия – George

+0

@George см. Мой ответ, вы должны ссылаться на функцию, а не выполнять ее. – David

+0

Обновленный ответ выше – PraveenVenu

1

Как видно HERE

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

или

window.onbeforeunload = goodBye; 

Хотя я хотел бы предложить экономии имя пользователя к Глоб по седений в вар вне загружаемой FUNC, что получает имя пользователя после первого приглашения, тогда вам не нужно снова запрашивать их для своего имени, когда они уходят

1

Вы coul 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

запрос работает нормально, проблема в том, что я хочу прощаться после нажатия кнопки закрытия. Этот код дает прощальное сообщение сразу после запроса независимо от onunload() или onbeforeunload() – George

+0

, это было просто для того, чтобы показать вам событие. вам нужно изменить свой код, как эта функция goodBye() { return ("До свидания" + имя пользователя + "!"); } – hennson

3

Вы не можете так рассказать: window.onunload = goodBye();

Если вы хотите Ассинг таким образом у вас есть три пути:

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

или

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

И моя любимая, потому что она позволяет добавлять больше функциональных возможностей:

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

Просто примечание: последний пример прерывает версии IE ниже 9. – David

+0

Какой пример? 1,2,3? –

+0

'addEventListener' не работает в IE8- – David

0

Это работает для меня, но принятый ответ не делает. Это также поддерживает больше событий браузера.

Это также может использоваться вместе с различными сценариями onbeforeunload и beforeunload.

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

doOnUnload(eventType, function(e) 
{ 
    console.log('godbye'); 
}); 
Смежные вопросы