onbeforeunload - привязка к выборочным событиям - PullRequest
5 голосов
/ 27 марта 2012

Я работаю над корпоративным приложением, в котором динамически формируется сгенерированный код, и мы не можем контролировать кодБольшинство элементов управления в форме имеют следующий код, связанный с ними

<select name="s_10_1_1_0"  onchange = 'SWESubmitForm(document.SWEForm10_0,s_5,"","1-E0RHB7")' id='s_10_1_1_0' tabindex=1997 >

<input type="text" name='s_10_1_11_0' value=''  onchange = 'SWESubmitForm(document.SWEForm10_0,s_7,"","1-E0RHB7")' id='s_10_1_11_0' tabindex=1997  maxlength="30">

Мы хотели бы представить диалоговое окно отмены, когда пользователь пытается перейти на другую страницу, используя ссылку в верхнем или нижнем колонтитуле.

Я использовал следующий код для привязки события onbeforeunload и представления пользователю диалогового окна отмены ok.

//this identifies the unique page name
var viewName = $('input[name="SWEView"]').val(); 
// if I am on desired page bind the event so that now dialog is presented to user
 if(viewName == "XRX eCustomer Create Service Request View"){
     $(window).bind('beforeunload', function(){
     return 'Your Inquiry has not been submitted yet.';
});
 }

Но проблема в том, что этот диалог появляется каждый раз, когда пользователь изменяет значение любого поляв форме (я полагаю, что это происходит из-за кода SWESubmitForm, присутствующего для события onchange).

Я хотел бы открыть диалоговое окно onbeforeunload, если пользователь щелкает любую другую ссылку за пределами формы или, другими словами, связывает onbeforeunload с выборочными событиями (включая закрытие окна) на странице.

Пожалуйста, помогите

1 Ответ

6 голосов
/ 27 марта 2012

.onbeforeunload() является глобальным.Вы не можете запустить его только для некоторых способов покинуть страницу.Если установлен обработчик событий, он будет запускаться независимо от того, как средство просмотра покидает страницу.

Вы можете отслеживать свое собственное внутреннее состояние и решать, следует ли запрашивать что-либо в обработчике onbeforeunload() или просто ничего не возвращать.(поэтому никаких подсказок не делается).

Итак, вы могли бы иметь такой код:

//this identifies the unique page name
var viewName = $('input[name="SWEView"]').val(); 
// if I am on desired page bind the event so that now dialog is presented to user
if(viewName == "XRX eCustomer Create Service Request View"){
    $(window).bind('beforeunload', function() {
        // figure out whether you need to prompt or not
        if (myStateSaysToPrompt) {
            return 'Your Inquiry has not been submitted yet.';
        } else {
            return;   // no prompt
        } 
   });
}

Обновление

Так как это довольно высокийна Google, получающем много просмотров, стоило бы отметить, что этот ответ больше не работает.

 $(window).bind('beforeunload', function() {

Обратите внимание, что в событии, которое связано, больше нет «on».Использование предыдущих onbeforeunload в более поздних версиях jQuery ничего не даст.

...