Skip to content

Commit 82d58de

Browse files
committed
netteForms: added formValues (list of computed values) instead of 'preventFiltering' workaround [Closes #161][Closes #143]
should be better solution than 94c47d5
1 parent 37a9490 commit 82d58de

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

src/assets/netteForms.js

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
'use strict';
3030

3131
var Nette = {};
32+
var formValues = {};
3233
var formToggles = {};
3334

3435
Nette.formErrors = [];
@@ -114,6 +115,9 @@
114115
* Returns the effective value of form element.
115116
*/
116117
Nette.getEffectiveValue = function(elem, filter) {
118+
if (formValues[elem.name] !== undefined) {
119+
return formValues[elem.name];
120+
}
117121
var val = Nette.getValue(elem);
118122
if (elem.getAttribute) {
119123
if (val === elem.getAttribute('data-nette-empty-value')) {
@@ -125,7 +129,7 @@
125129
Nette.validateControl(elem, null, true, ref);
126130
val = ref.value;
127131
}
128-
return val;
132+
return formValues[elem.name] = val;
129133
};
130134

131135

@@ -200,6 +204,7 @@
200204
scope = false;
201205

202206
Nette.formErrors = [];
207+
formValues = {};
203208

204209
if (form['nette-submittedBy'] && form['nette-submittedBy'].getAttribute('formnovalidate') !== null) {
205210
var scopeArr = JSON.parse(form['nette-submittedBy'].getAttribute('data-nette-validation-scope') || '[]');
@@ -297,8 +302,6 @@
297302
};
298303

299304

300-
var preventFiltering = false;
301-
302305
/**
303306
* Validates single rule.
304307
*/
@@ -312,16 +315,13 @@
312315
op = op.replace(/\\/g, '');
313316

314317
var arr = Array.isArray(arg) ? arg.slice(0) : [arg];
315-
if (!preventFiltering) {
316-
preventFiltering = true;
317-
for (var i = 0, len = arr.length; i < len; i++) {
318-
if (arr[i] && arr[i].control) {
319-
var control = elem.form.elements.namedItem(arr[i].control);
320-
arr[i] = control === elem ? value.value : Nette.getEffectiveValue(control, true);
321-
}
318+
for (var i = 0, len = arr.length; i < len; i++) {
319+
if (arr[i] && arr[i].control) {
320+
var control = elem.form.elements.namedItem(arr[i].control);
321+
arr[i] = control === elem ? value.value : Nette.getEffectiveValue(control, true);
322322
}
323-
preventFiltering = false;
324323
}
324+
325325
return Nette.validators[op]
326326
? Nette.validators[op](elem, Array.isArray(arg) ? arr : arr[0], value.value, value)
327327
: null;
@@ -561,7 +561,7 @@
561561
*/
562562
Nette.toggleForm = function(form, elem) {
563563
var i;
564-
formToggles = {};
564+
formToggles = formValues = {};
565565
for (i = 0; i < form.elements.length; i++) {
566566
if (form.elements[i].tagName.toLowerCase() in {input: 1, select: 1, textarea: 1, button: 1}) {
567567
Nette.toggleControl(form.elements[i], null, null, !elem);
@@ -669,6 +669,12 @@
669669
e.preventDefault();
670670
}
671671
});
672+
673+
for (var i = 0; i < form.elements.length; i++) {
674+
form.elements[i].addEventListener('change', function(e) {
675+
formValues = {};
676+
});
677+
}
672678
};
673679

674680

0 commit comments

Comments
 (0)