2012-03-27 13 views
5

Estoy trabajando en una aplicación empresarial donde se genera un formulario dinámicamente y no tenemos control sobre el código. La mayoría de los controles en la forma siguiente código se han asociado a ellosantes de la descarga - vincular a eventos selectivos

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

Nos gustaría presentar un bien cancela de diálogo cuando el usuario intenta desplazarse a otra página usando el enlace en el encabezado o pie de página.

He usado el código siguiente para vincular onbeforeunload event y presentar un cuadro de diálogo de cancelación ok para el usuario.

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

Pero el problema es que este diálogo viene cada vez que el usuario cambia un valor de cualquier campo en el formulario (creo que esto es debido al código SWESubmitForm presente para onchange evento).

Me gustaría antes de descargar el cuadro de diálogo si el usuario hace clic en cualquier otro enlace fuera del formulario o, en otras palabras, antes de descargar a los eventos selectivos (incluido el cierre de la ventana) en la página.

por favor ayuda

Respuesta

6

.onbeforeunload() es global. No puede hacer que se active solo para algunas formas de abandonar la página. Si el controlador de eventos está instalado, se activará sin importar cómo el espectador abandone la página.

Puede realizar un seguimiento de su propio estado interno y decidir si desea solicitar algo en el controlador onbeforeunload() o simplemente no devolver nada (por lo que no se realiza ninguna solicitud).

Por lo tanto, usted podría tener un código como éste:

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

actualización

ya que esto es bastante alta en google conseguir muchos puntos de vista que valdría la pena señalar que esta respuesta ya no funciona.

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

Tenga en cuenta que ya no está 'activado' en el caso de estar encuadernado. El uso de onbeforeunload anterior en versiones posteriores de jQuery dará como resultado que no ocurra nada.

Cuestiones relacionadas