|
29 | 29 | 'use strict';
|
30 | 30 |
|
31 | 31 | var Nette = {};
|
| 32 | + var formValues = {}; |
32 | 33 | var formToggles = {};
|
33 | 34 |
|
34 | 35 | Nette.formErrors = [];
|
|
114 | 115 | * Returns the effective value of form element.
|
115 | 116 | */
|
116 | 117 | Nette.getEffectiveValue = function(elem, filter) {
|
| 118 | + if (formValues[elem.name] !== undefined) { |
| 119 | + return formValues[elem.name]; |
| 120 | + } |
117 | 121 | var val = Nette.getValue(elem);
|
118 | 122 | if (elem.getAttribute) {
|
119 | 123 | if (val === elem.getAttribute('data-nette-empty-value')) {
|
|
125 | 129 | Nette.validateControl(elem, null, true, ref);
|
126 | 130 | val = ref.value;
|
127 | 131 | }
|
128 |
| - return val; |
| 132 | + return formValues[elem.name] = val; |
129 | 133 | };
|
130 | 134 |
|
131 | 135 |
|
|
200 | 204 | scope = false;
|
201 | 205 |
|
202 | 206 | Nette.formErrors = [];
|
| 207 | + formValues = {}; |
203 | 208 |
|
204 | 209 | if (form['nette-submittedBy'] && form['nette-submittedBy'].getAttribute('formnovalidate') !== null) {
|
205 | 210 | var scopeArr = JSON.parse(form['nette-submittedBy'].getAttribute('data-nette-validation-scope') || '[]');
|
|
297 | 302 | };
|
298 | 303 |
|
299 | 304 |
|
300 |
| - var preventFiltering = false; |
301 |
| - |
302 | 305 | /**
|
303 | 306 | * Validates single rule.
|
304 | 307 | */
|
|
312 | 315 | op = op.replace(/\\/g, '');
|
313 | 316 |
|
314 | 317 | 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); |
322 | 322 | }
|
323 |
| - preventFiltering = false; |
324 | 323 | }
|
| 324 | + |
325 | 325 | return Nette.validators[op]
|
326 | 326 | ? Nette.validators[op](elem, Array.isArray(arg) ? arr : arr[0], value.value, value)
|
327 | 327 | : null;
|
|
561 | 561 | */
|
562 | 562 | Nette.toggleForm = function(form, elem) {
|
563 | 563 | var i;
|
564 |
| - formToggles = {}; |
| 564 | + formToggles = formValues = {}; |
565 | 565 | for (i = 0; i < form.elements.length; i++) {
|
566 | 566 | if (form.elements[i].tagName.toLowerCase() in {input: 1, select: 1, textarea: 1, button: 1}) {
|
567 | 567 | Nette.toggleControl(form.elements[i], null, null, !elem);
|
|
669 | 669 | e.preventDefault();
|
670 | 670 | }
|
671 | 671 | });
|
| 672 | + |
| 673 | + for (var i = 0; i < form.elements.length; i++) { |
| 674 | + form.elements[i].addEventListener('change', function(e) { |
| 675 | + formValues = {}; |
| 676 | + }); |
| 677 | + } |
672 | 678 | };
|
673 | 679 |
|
674 | 680 |
|
|
0 commit comments