diff --git a/src/assets/netteForms.js b/src/assets/netteForms.js index 81cf84bb4..4e516d152 100644 --- a/src/assets/netteForms.js +++ b/src/assets/netteForms.js @@ -22,6 +22,7 @@ 'use strict'; var Nette = {}; +Nette.errors = []; /** * Attaches a handler to an event for the element. @@ -201,11 +202,9 @@ Nette.validateForm = function(sender) { continue; } - if (!Nette.validateControl(elem)) { - return false; - } + Nette.validateControl(elem); } - return true; + return Nette.showErrors(); }; @@ -226,15 +225,57 @@ Nette.isDisabled = function(elem) { /** - * Display error message. + * Adds error message to the queue. */ Nette.addError = function(elem, message) { - if (message) { - alert(message); + Nette.errors.push({ + elem: elem, + message: message + }); +}; + + +/** + * Display error messages. + */ +Nette.showErrors = function() { + var messages = []; + var focusElem; + + for (var i in Nette.errors) { + var obj = Nette.errors[i]; + var elem = obj.elem; + var message = obj.message; + + if (messages.indexOf(message) === -1) { + messages.push(message); + + if (!focusElem && elem.focus) { + focusElem = elem; + } + } } - if (elem.focus) { - elem.focus(); + + Nette.errors = []; + if (messages.length) { + Nette.alert(messages.join('\n')); + + if (focusElem) { + focusElem.focus(); + } + + return false; } + + return true; +}; + + +/** + * Shows an alert. + */ +Nette.alert = function(message) { + alert(message); };