@@ -177,6 +177,12 @@ Nette.validateControl = function(elem, rules, onlyCheck, value) {
177177 return false ;
178178 }
179179 }
180+
181+ if ( ! onlyCheck && elem . type === 'number' && ! elem . validity . valid ) {
182+ Nette . addError ( elem , 'Please enter a valid value.' ) ;
183+ return false ;
184+ }
185+
180186 return true ;
181187} ;
182188
@@ -292,6 +298,9 @@ Nette.validateRule = function(elem, op, arg, value) {
292298
293299Nette . validators = {
294300 filled : function ( elem , arg , val ) {
301+ if ( elem . type === 'number' && elem . validity . badInput ) {
302+ return true ;
303+ }
295304 return val !== '' && val !== false && val !== null
296305 && ( ! Nette . isArray ( val ) || ! ! val . length )
297306 && ( ! window . FileList || ! ( val instanceof window . FileList ) || val . length ) ;
@@ -337,14 +346,35 @@ Nette.validators = {
337346 } ,
338347
339348 minLength : function ( elem , arg , val ) {
349+ if ( elem . type === 'number' ) {
350+ if ( elem . validity . tooShort ) {
351+ return false
352+ } else if ( elem . validity . badInput ) {
353+ return null ;
354+ }
355+ }
340356 return val . length >= arg ;
341357 } ,
342358
343359 maxLength : function ( elem , arg , val ) {
360+ if ( elem . type === 'number' ) {
361+ if ( elem . validity . tooLong ) {
362+ return false
363+ } else if ( elem . validity . badInput ) {
364+ return null ;
365+ }
366+ }
344367 return val . length <= arg ;
345368 } ,
346369
347370 length : function ( elem , arg , val ) {
371+ if ( elem . type === 'number' ) {
372+ if ( elem . validity . tooShort || elem . validity . tooLong ) {
373+ return false
374+ } else if ( elem . validity . badInput ) {
375+ return null ;
376+ }
377+ }
348378 arg = Nette . isArray ( arg ) ? arg : [ arg , arg ] ;
349379 return ( arg [ 0 ] === null || val . length >= arg [ 0 ] ) && ( arg [ 1 ] === null || val . length <= arg [ 1 ] ) ;
350380 } ,
@@ -378,10 +408,16 @@ Nette.validators = {
378408 } ,
379409
380410 integer : function ( elem , arg , val ) {
411+ if ( elem . type === 'number' && elem . validity . badInput ) {
412+ return false ;
413+ }
381414 return ( / ^ - ? [ 0 - 9 ] + $ / ) . test ( val ) ;
382415 } ,
383416
384417 'float' : function ( elem , arg , val , value ) {
418+ if ( elem . type === 'number' && elem . validity . badInput ) {
419+ return false ;
420+ }
385421 val = val . replace ( ' ' , '' ) . replace ( ',' , '.' ) ;
386422 if ( ( / ^ - ? [ 0 - 9 ] * [ . , ] ? [ 0 - 9 ] + $ / ) . test ( val ) ) {
387423 value . value = val ;
@@ -391,14 +427,35 @@ Nette.validators = {
391427 } ,
392428
393429 min : function ( elem , arg , val ) {
430+ if ( elem . type === 'number' ) {
431+ if ( elem . validity . rangeUnderflow ) {
432+ return false
433+ } else if ( elem . validity . badInput ) {
434+ return null ;
435+ }
436+ }
394437 return Nette . validators . range ( elem , [ arg , null ] , val ) ;
395438 } ,
396439
397440 max : function ( elem , arg , val ) {
441+ if ( elem . type === 'number' ) {
442+ if ( elem . validity . rangeOverflow ) {
443+ return false
444+ } else if ( elem . validity . badInput ) {
445+ return null ;
446+ }
447+ }
398448 return Nette . validators . range ( elem , [ null , arg ] , val ) ;
399449 } ,
400450
401451 range : function ( elem , arg , val ) {
452+ if ( elem . type === 'number' ) {
453+ if ( elem . validity . rangeUnderflow || elem . validity . rangeOverflow ) {
454+ return false
455+ } else if ( elem . validity . badInput ) {
456+ return null ;
457+ }
458+ }
402459 return Nette . isArray ( arg ) ?
403460 ( ( arg [ 0 ] === null || parseFloat ( val ) >= arg [ 0 ] ) && ( arg [ 1 ] === null || parseFloat ( val ) <= arg [ 1 ] ) ) : null ;
404461 } ,
0 commit comments