2016-07-24 10 views
2

Ich versuche onbeforeunload konsistent auf meiner Seite zu arbeiten, die eine Form hat, die Benutzer ausfüllen. Ich erwarte folgendes:In Rails, onbeforeunload funktioniert nicht konsistent für Chrome-Browser

  • Wenn ich einen Link auf eine andere Seite klicken, würde es dem Benutzer
  • Prompt Wenn ich die Seite aktualisieren, würde es dem Benutzer

prompt Ich bin Derzeit testen wir unter Google Chrome, und ich verwende jetzt das Folgende - obwohl ich einige Variationen ausprobiert habe.

<script> 

    $(document).on('ready page:load', function() { 
    $(window).on('beforeunload', function() { 
     return "You should keep this page open."; 
    }); 
    }); 

</script> 

Ich war in der Lage, die Aufforderung zu bekommen, manchmal aber nicht konsequent zu erscheinen. Ich dachte, dies könnte auf einen Konflikt mit dem obigen Code und turbolinks hinweisen. Es ist mir jedoch nicht gelungen, eine Lösung zu finden, um die oben genannten erwarteten Ergebnisse zu erzielen.

--- Update:

Hier ist der Code, den ich schließlich verwendet.

<script data-turbolinks-eval="false"> 

$(document).ready(function() { 
    form_modified=0; 

    $('#report-form *').change(function(){ 
    form_modified=1; 
    }); 

    $("#report-form input[name='commit']").click(function() { 
     form_modified = 0; 
    }); 
}); 

$(document).on('page:before-change', function() { 

    if ($("#report-form").length > 0) { 
    if (form_modified==1) { 
     if (confirm("There are unsaved changes, click \"Cancel\" to remain on the page.")) { 
     // clicks "OK", nothing here means 
     } else { 
     // clicks "Cancel" 
     event.preventDefault(); 
     } 
    } 
    } 
}); 

</script> 

Diese Methode funktioniert nicht für die Aktualisierung der Seite oder durch das Fenster „X“ jedoch verlässt aus ...

Antwort

1

Turbolinks bietet die page:before-change Ereignis für diese Art von Szenario.

Ich bin mir jedoch nicht sicher, warum Sie Ihre 2. Handler in Ihre erste Handler binden. Das Objekt window ändert sich nicht, wenn Sie auf einen Turbolinks-Link klicken.

Verwandte Themen