From 19c874706e4510220dd2cd376dcc4c13877b79e3 Mon Sep 17 00:00:00 2001
From: Rafael Ostertag <rafael.ostertag@math.uzh.ch>
Date: Tue, 10 May 2016 15:02:37 +0200
Subject: [PATCH] Implemented https://project/issues/1929

---
 javascript/src/Form.js    | 21 +++++++++++++++++++++
 javascript/src/QfqForm.js |  9 +++++++++
 2 files changed, 30 insertions(+)

diff --git a/javascript/src/Form.js b/javascript/src/Form.js
index 67651ae28..16bc10b17 100644
--- a/javascript/src/Form.js
+++ b/javascript/src/Form.js
@@ -109,4 +109,25 @@ var QfqNS = QfqNS || {};
         return document.forms[this.formId].checkValidity();
     };
 
+    /**
+     * @public
+     */
+    n.Form.prototype.getFirstNonValidElement = function () {
+        var index;
+        var elementNumber = document.forms[this.formId].length;
+
+        for (index = 0; index < elementNumber; index++) {
+            var element = document.forms[this.formId][index];
+            if (!element.willValidate) {
+                continue;
+            }
+
+            if (!element.checkValidity()) {
+                return element;
+            }
+        }
+
+        return null;
+    };
+
 })(QfqNS);
diff --git a/javascript/src/QfqForm.js b/javascript/src/QfqForm.js
index 975f4eef6..96ea6e862 100644
--- a/javascript/src/QfqForm.js
+++ b/javascript/src/QfqForm.js
@@ -309,6 +309,15 @@ var QfqNS = QfqNS || {};
         if (this.form.validate() !== true) {
 
             this.form.$form.validator('validate');
+
+            var element = this.form.getFirstNonValidElement();
+            if (element.hasAttribute('name')) {
+                var tabId = this.bsTabs.getContainingTabIdForFormControl(element.getAttribute('name'));
+                if (tabId) {
+                    this.bsTabs.activateTab(tabId);
+                }
+            }
+
             var alert = new n.Alert("Form is incomplete.", "warning");
             alert.show();
             return;
-- 
GitLab