Skip to content

Commit 72a5c56

Browse files
committed
netteForms.js: fixed length validation on checkbox list with exactly 1 item [Closes #59]
1 parent 95a4d69 commit 72a5c56

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/assets/netteForms.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ Nette.getValue = function(elem) {
4747
} else if (!elem.form.elements[elem.name].nodeName) { // multi element
4848
return Nette.getValue(elem.form.elements[elem.name]);
4949

50+
} else if (elem.type === 'file') {
51+
return elem.files || elem.value;
52+
53+
} else if (elem.name.match(/\[\]$/)) { // multi element with single option
54+
return Nette.getValue([elem]);
55+
5056
} else if (elem.nodeName.toLowerCase() === 'select') {
5157
var index = elem.selectedIndex, options = elem.options, values = [];
5258

@@ -67,9 +73,6 @@ Nette.getValue = function(elem) {
6773
} else if (elem.type === 'radio') {
6874
return elem.checked && elem.value;
6975

70-
} else if (elem.type === 'file') {
71-
return elem.files || elem.value;
72-
7376
} else if (elem.nodeName.toLowerCase() === 'textarea') {
7477
return elem.value.replace("\r", '');
7578

tests/netteForms/spec/Nette.validateRuleSpec.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,30 @@ describe('Nette.getValue & validateRule', function() {
179179
});
180180

181181

182+
it('checkbox list with single item', function() {
183+
fixtures.set('<form><input type="checkbox" name="input[]" value="r" id="input-r"></form>');
184+
185+
var doc = fixtures.window().document,
186+
form = doc.forms[0],
187+
el = form['input[]'];
188+
189+
expect(Nette.getValue(el)).toEqual([]);
190+
expect(Nette.validateRule(el, 'filled')).toBe(false);
191+
expect(Nette.validateRule(el, 'blank')).toBe(true);
192+
expect(Nette.validateRule(el, 'equal', ['r', 'g', 'b'])).toBe(true);
193+
194+
doc.getElementById('input-r').checked = true;
195+
expect(Nette.getValue(el)).toEqual(['r']);
196+
expect(Nette.validateRule(el, 'filled')).toBe(true);
197+
expect(Nette.validateRule(el, 'blank')).toBe(false);
198+
expect(Nette.validateRule(el, 'equal', 'r')).toBe(true);
199+
expect(Nette.validateRule(el, 'equal', 'g')).toBe(false);
200+
expect(Nette.validateRule(el, 'equal', ['r', 'g'])).toBe(true);
201+
expect(Nette.validateRule(el, 'minLength', 1)).toBe(true);
202+
expect(Nette.validateRule(el, 'minLength', 2)).toBe(false);
203+
});
204+
205+
182206
it('radio', function() {
183207
fixtures.set('<form><input type="radio" name="input" value="f"><form>');
184208

0 commit comments

Comments
 (0)