@@ -41,27 +41,21 @@ Nette.addEvent = function(element, on, callback) {
41
41
* Returns the value of form element.
42
42
*/
43
43
Nette . getValue = function ( elem ) {
44
- var i , len ;
44
+ var i ;
45
45
if ( ! elem ) {
46
46
return null ;
47
47
48
48
} else if ( ! elem . tagName ) { // RadioNodeList, HTMLCollection, array
49
- var multi = elem [ 0 ] && ! ! elem [ 0 ] . name . match ( / \[ \] $ / ) ,
50
- res = [ ] ;
49
+ return elem [ 0 ] ? Nette . getValue ( elem [ 0 ] ) : null ;
51
50
52
- for ( i = 0 , len = elem . length ; i < len ; i ++ ) {
53
- if ( elem [ i ] . type in { checkbox : 1 , radio : 1 } && ! elem [ i ] . checked ) {
54
- continue ;
55
- } else if ( multi ) {
56
- res . push ( elem [ i ] . value ) ;
57
- } else {
58
- return elem [ i ] . value ;
51
+ } else if ( elem . type === 'radio' ) {
52
+ var elements = elem . form . elements ; // prevents problem with name 'item' or 'namedItem'
53
+ for ( i = 0 ; i < elements . length ; i ++ ) {
54
+ if ( elements [ i ] . name === elem . name && elements [ i ] . checked ) {
55
+ return elements [ i ] . value ;
59
56
}
60
57
}
61
- return multi ? res : null ;
62
-
63
- } else if ( elem . name && ! elem . form . elements . namedItem ( elem . name ) . tagName ) { // multi element
64
- return Nette . getValue ( elem . form . elements . namedItem ( elem . name ) ) ;
58
+ return null ;
65
59
66
60
} else if ( elem . type === 'file' ) {
67
61
return elem . files || elem . value ;
@@ -75,22 +69,27 @@ Nette.getValue = function(elem) {
75
69
return index < 0 ? null : options [ index ] . value ;
76
70
}
77
71
78
- for ( i = 0 , len = options . length ; i < len ; i ++ ) {
72
+ for ( i = 0 ; i < options . length ; i ++ ) {
79
73
if ( options [ i ] . selected ) {
80
74
values . push ( options [ i ] . value ) ;
81
75
}
82
76
}
83
77
return values ;
84
78
85
- } else if ( elem . name && elem . name . match ( / \[ \] $ / ) ) { // multi element with single option
86
- return Nette . getValue ( [ elem ] ) ;
79
+ } else if ( elem . name && elem . name . match ( / \[ \] $ / ) ) { // multiple elements []
80
+ var elements = elem . form . elements [ elem . name ] . tagName ? [ elem ] : elem . form . elements [ elem . name ] ,
81
+ values = [ ] ;
82
+
83
+ for ( i = 0 ; i < elements . length ; i ++ ) {
84
+ if ( elements [ i ] . type !== 'checkbox' || elements [ i ] . checked ) {
85
+ values . push ( elements [ i ] . value ) ;
86
+ }
87
+ }
88
+ return values ;
87
89
88
90
} else if ( elem . type === 'checkbox' ) {
89
91
return elem . checked ;
90
92
91
- } else if ( elem . type === 'radio' ) {
92
- return elem . checked && elem . value ;
93
-
94
93
} else if ( elem . tagName . toLowerCase ( ) === 'textarea' ) {
95
94
return elem . value . replace ( "\r" , '' ) ;
96
95
@@ -215,9 +214,8 @@ Nette.validateForm = function(sender) {
215
214
*/
216
215
Nette . isDisabled = function ( elem ) {
217
216
if ( elem . type === 'radio' ) {
218
- elem = elem . form . elements . namedItem ( elem . name ) . tagName ? [ elem ] : elem . form . elements . namedItem ( elem . name ) ;
219
- for ( var i = 0 ; i < elem . length ; i ++ ) {
220
- if ( ! elem [ i ] . disabled ) {
217
+ for ( var i = 0 , elements = elem . form . elements ; i < elements . length ; i ++ ) {
218
+ if ( elements [ i ] . name === elem . name && ! elements [ i ] . disabled ) {
221
219
return false ;
222
220
}
223
221
}
0 commit comments