2012-03-27 12 views
5

Sto lavorando a un'applicazione enterprise in cui viene generato un file generato dinamicamente e non abbiamo il controllo sul codice. La maggior parte dei controlli in forma hanno seguente codice associato a loroonbeforeunload - collegamento ad eventi selettivi

<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"> 

Vorremmo presentare un ok dialogo annullare quando l'utente tenta di accedere a qualche altra pagina utilizzando il collegamento nell'intestazione o piè di pagina.

Ho usato il seguente codice per associare un evento onbeforeunload e presentare all'utente una finestra di dialogo ok cancel.

//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.'; 
}); 
} 

Ma il problema è che questa finestra viene ogni volta che l'utente cambia un valore di ogni campo del modulo (credo che sia a causa di codice SWESubmitForm presenti per onchange evento).

Mi piacerebbe onbeforeunload di dialogo per venire se l'utente fa clic su qualsiasi altro collegamento al di fuori del modulo o in altre parole legare onbeforeunload a eventi selettivi (compresa la chiusura della finestra) sulla pagina.

si prega di aiuto

risposta

6

.onbeforeunload() è globale. Non puoi attivarlo solo per alcuni modi di uscire dalla pagina. Se il gestore eventi è installato, si attiverà indipendentemente da come lo spettatore lascia la pagina.

È possibile tenere traccia del proprio stato interno e decidere se richiedere qualcosa nel gestore onbeforeunload() o semplicemente non restituire nulla (quindi non viene richiesto alcun prompt).

Quindi, si potrebbe avere codice come questo:

//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 
     } 
    }); 
} 

Aggiornamento

come questo è abbastanza elevato su google ottenere molti punti di vista, sarebbe la pena notare che questa risposta non funziona più.

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

Si noti che non è più "attivo" nell'evento associato. Utilizzando il precedente onbeforeunload nelle versioni successive di jQuery, non si verificherà nulla.

Problemi correlati