@@ -267,30 +267,37 @@ Nette.addError = function(elem, message) {
267267
268268
269269/**
270- * Display error messages .
270+ * CSS class .
271271 */
272- Nette . showFormErrors = function ( form , errors ) {
273- var messages = [ ] ,
274- focusElem ;
275-
276- for ( var i in errors ) {
277- var elem = errors [ i ] . element ,
278- message = errors [ i ] . message ;
272+ Nette . formErrorClass = 'nette-form-error' ;
279273
280- if ( messages . indexOf ( message ) < 0 ) {
281- messages . push ( message ) ;
282274
283- if ( ! focusElem && elem . focus ) {
284- focusElem = elem ;
285- }
275+ /**
276+ * Display error messages.
277+ */
278+ Nette . showFormErrors = function ( form , errors ) {
279+ var boxes = form . getElementsByTagName ( 'span' ) ;
280+ for ( var i = boxes . length - 1 ; i >= 0 ; i -- ) {
281+ if ( boxes [ i ] . getAttribute ( 'class' ) === Nette . formErrorClass ) {
282+ boxes [ i ] . parentNode . removeChild ( boxes [ i ] ) ;
286283 }
287284 }
288285
289- if ( messages . length ) {
290- alert ( messages . join ( '\n' ) ) ;
286+ for ( var i = 0 ; i < errors . length ; i ++ ) {
287+ if ( i === 0 && errors [ i ] . element . focus ) {
288+ errors [ i ] . element . focus ( ) ;
289+ }
291290
292- if ( focusElem ) {
293- focusElem . focus ( ) ;
291+ if ( errors [ i ] . message ) {
292+ var box = document . createElement ( 'span' ) ;
293+ box . setAttribute ( 'class' , Nette . formErrorClass ) ;
294+ box . textContent = errors [ i ] . message ;
295+ errors [ i ] . element . parentNode . insertBefore ( box , errors [ i ] . element . nextSibling ) ;
296+ Nette . addEvent ( errors [ i ] . element , 'keypress' , function ( ) {
297+ if ( this . nextSibling && this . nextSibling . getAttribute ( 'class' ) === Nette . formErrorClass ) {
298+ this . parentNode . removeChild ( this . nextSibling ) ;
299+ }
300+ } ) ;
294301 }
295302 }
296303} ;
0 commit comments