diff --git a/app/static/js/jury_but.js b/app/static/js/jury_but.js
index 1ef24c168f53e9e510996d0b361ba9ead54ead40..c90f95d633019ee8f9efd5b570021f3a14e6eba8 100644
--- a/app/static/js/jury_but.js
+++ b/app/static/js/jury_but.js
@@ -59,4 +59,29 @@ $(function () {
         }
 
     }
-});
\ No newline at end of file
+});
+
+//  ----- Etat du formulaire jury pour éviter sortie sans enregistrer
+let FORM_STATE = "";
+// Une chaine décrivant l'état du form
+function get_form_state() {
+    let codes = [];
+    // il n'y a que des <select>
+    document.querySelectorAll("select").forEach(sel => codes.push(sel.value));
+    return codes.join();
+}
+
+$('document').ready(function () {
+    FORM_STATE = get_form_state();
+});
+
+function is_modified() {
+    return FORM_STATE != get_form_state();
+}
+window.addEventListener("beforeunload", function (e) {
+    if (is_modified()) {
+        var confirmationMessage = 'Changements non enregistrés !';
+        (e || window.event).returnValue = confirmationMessage;
+        return confirmationMessage;
+    }
+});
diff --git a/sco_version.py b/sco_version.py
index 5a42b639a00c9397948e4f2d84d8bb89b0c2226e..98f0f59b52a9128a9cbd4d7053ea13fdbcd276e2 100644
--- a/sco_version.py
+++ b/sco_version.py
@@ -1,7 +1,7 @@
 # -*- mode: python -*-
 # -*- coding: utf-8 -*-
 
-SCOVERSION = "9.4.19"
+SCOVERSION = "9.4.20"
 
 SCONAME = "ScoDoc"