Skip to content

Commit f5a1884

Browse files
Merge pull request #1329 from SergioCrisostomo/squash-1188
Bugfix to validate-reqchk-byname #1188
2 parents a28974f + 0b8871f commit f5a1884

File tree

1 file changed

+38
-7
lines changed

1 file changed

+38
-7
lines changed

Source/Forms/Form.Validator.Extras.js

+38-7
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,23 @@ provides: [Form.Validator.Extras]
1919
2020
...
2121
*/
22+
23+
(function(){
24+
25+
function getItems(props, preference, children, cssSelector){
26+
if (preference && props[preference]) return props[preference];
27+
var el = document.id(props[children]);
28+
if (!el) return [];
29+
return el.getElements(cssSelector)
30+
}
31+
2232
Form.Validator.addAllThese([
2333

2434
['validate-enforce-oncheck', {
2535
test: function(element, props){
2636
var fv = element.getParent('form').retrieve('validator');
2737
if (!fv) return true;
28-
(props.toEnforce || document.id(props.enforceChildrenOf).getElements('input, select, textarea')).map(function(item){
38+
getItems(props, 'toEnforce', 'enforceChildrenOf', 'input, select, textarea').each(function(item){
2939
if (element.checked){
3040
fv.enforceField(item);
3141
} else {
@@ -41,7 +51,7 @@ Form.Validator.addAllThese([
4151
test: function(element, props){
4252
var fv = element.getParent('form').retrieve('validator');
4353
if (!fv) return true;
44-
(props.toIgnore || document.id(props.ignoreChildrenOf).getElements('input, select, textarea')).each(function(item){
54+
getItems(props, 'toIgnore', 'ignoreChildrenOf', 'input, select, textarea').each(function(item){
4555
if (element.checked){
4656
fv.ignoreField(item);
4757
fv.resetField(item);
@@ -52,6 +62,23 @@ Form.Validator.addAllThese([
5262
return true;
5363
}
5464
}],
65+
66+
['validate-enforce-onselect-value', {
67+
test: function(element, props){
68+
if( !props.value ) return true;
69+
var fv = element.getParent('form').retrieve('validator');
70+
if (!fv) return true;
71+
getItems(props, 'toEnforce', 'enforceChildrenOf', 'input, select, textarea').each(function(item){
72+
if (props.value == element.value){
73+
fv.enforceField(item);
74+
} else {
75+
fv.ignoreField(item);
76+
fv.resetField(item);
77+
}
78+
});
79+
return true;
80+
}
81+
}],
5582

5683
['validate-nospace', {
5784
errorMsg: function(){
@@ -66,7 +93,7 @@ Form.Validator.addAllThese([
6693
test: function(element, props){
6794
var fv = element.getParent('form').retrieve('validator');
6895
if (!fv) return true;
69-
var eleArr = props.toToggle || document.id(props.toToggleChildrenOf).getElements('input, select, textarea');
96+
var eleArr = getItems(props, 'toToggle', 'toToggleChildrenOf', 'input, select, textarea');
7097
if (!element.checked){
7198
eleArr.each(function(item){
7299
fv.ignoreField(item);
@@ -86,7 +113,7 @@ Form.Validator.addAllThese([
86113
return Form.Validator.getMsg('reqChkByNode');
87114
},
88115
test: function(element, props){
89-
return (document.id(props.nodeId).getElements(props.selector || 'input[type=checkbox], input[type=radio]')).some(function(item){
116+
return getItems(props, false, 'nodeId', props.selector || 'input[type=checkbox], input[type=radio]').some(function(item){
90117
return item.checked;
91118
});
92119
}
@@ -107,11 +134,14 @@ Form.Validator.addAllThese([
107134
},
108135
test: function(element, props){
109136
var grpName = props.groupName || element.get('name');
110-
var oneCheckedItem = $$(document.getElementsByName(grpName)).some(function(item, index){
137+
var grpNameEls = $$('[name=' + grpName +']');
138+
var oneCheckedItem = grpNameEls.some(function(item, index){
111139
return item.checked;
112140
});
113141
var fv = element.getParent('form').retrieve('validator');
114-
if (oneCheckedItem && fv) fv.resetField(element);
142+
if (oneCheckedItem && fv){
143+
grpNameEls.each(function(item, index){ fv.resetField(item); });
144+
}
115145
return oneCheckedItem;
116146
}
117147
}],
@@ -228,5 +258,6 @@ Form.Validator.addAllThese([
228258
}
229259
}]
230260

231-
232261
]);
262+
263+
});

0 commit comments

Comments
 (0)