diff --git a/javascript/src/Form.js b/javascript/src/Form.js index 67651ae28c51f26529d8354e019e5506fe482bbf..16bc10b17bf34fb70b665bb9dc1d6fc27ce08c41 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 975f4eef64e6aeb5fac1a99c611638c810296f91..96ea6e862c73b888b38662a867c9d7ff25883309 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;