Actualmente tengo una función que establece "isDirty = true" cuando se realiza un cambio en la página. Funciona como se esperaba . Tengo una función que solo se activa cuando se navega fuera de la página actual después de no elegir el botón Guardar.
function pageChange() { if (isDirty == true) { window.addEventListener('beforeunload', function (e) { // Cancel the event e.preventDefault(); e.returnValue = ''; isDirty = false; }); } else { return } }Lo anterior funciona, sin embargo, cuando hago clic en cancelar en la alerta para permanecer en la página y luego guardo la página, el cuadro de diálogo aparece nuevamente.
Puede especificar la opción once en la llamada addEventListener :
function pageChange() { if (isDirty == true) { window.addEventListener('beforeunload', function (e) { ... }, { once: true }); } }