diff --git a/src/assets/netteForms.js b/src/assets/netteForms.js index 2cb055cf1..5f12b914e 100644 --- a/src/assets/netteForms.js +++ b/src/assets/netteForms.js @@ -47,6 +47,12 @@ Nette.getValue = function(elem) { } else if (!elem.form.elements[elem.name].nodeName) { // multi element return Nette.getValue(elem.form.elements[elem.name]); + } else if (elem.type === 'file') { + return elem.files || elem.value; + + } else if (elem.name.match(/\[\]$/)) { // multi element with single option + return Nette.getValue([elem]); + } else if (elem.nodeName.toLowerCase() === 'select') { var index = elem.selectedIndex, options = elem.options, values = []; @@ -67,9 +73,6 @@ Nette.getValue = function(elem) { } else if (elem.type === 'radio') { return elem.checked && elem.value; - } else if (elem.type === 'file') { - return elem.files || elem.value; - } else if (elem.nodeName.toLowerCase() === 'textarea') { return elem.value.replace("\r", ''); diff --git a/tests/netteForms/spec/Nette.validateRuleSpec.js b/tests/netteForms/spec/Nette.validateRuleSpec.js index 5b0973bf3..c7c42cf79 100644 --- a/tests/netteForms/spec/Nette.validateRuleSpec.js +++ b/tests/netteForms/spec/Nette.validateRuleSpec.js @@ -179,6 +179,30 @@ describe('Nette.getValue & validateRule', function() { }); + it('checkbox list with single item', function() { + fixtures.set('
'); + + var doc = fixtures.window().document, + form = doc.forms[0], + el = form['input[]']; + + expect(Nette.getValue(el)).toEqual([]); + expect(Nette.validateRule(el, 'filled')).toBe(false); + expect(Nette.validateRule(el, 'blank')).toBe(true); + expect(Nette.validateRule(el, 'equal', ['r', 'g', 'b'])).toBe(true); + + doc.getElementById('input-r').checked = true; + expect(Nette.getValue(el)).toEqual(['r']); + expect(Nette.validateRule(el, 'filled')).toBe(true); + expect(Nette.validateRule(el, 'blank')).toBe(false); + expect(Nette.validateRule(el, 'equal', 'r')).toBe(true); + expect(Nette.validateRule(el, 'equal', 'g')).toBe(false); + expect(Nette.validateRule(el, 'equal', ['r', 'g'])).toBe(true); + expect(Nette.validateRule(el, 'minLength', 1)).toBe(true); + expect(Nette.validateRule(el, 'minLength', 2)).toBe(false); + }); + + it('radio', function() { fixtures.set('
');