Skip to content

Commit ce34ac1

Browse files
committed
Fixes #17: Keep track of last seen as full name, not just current name
1 parent 87f8278 commit ce34ac1

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

dom/form_params/form_params.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,33 @@ steal("jquery/dom").then(function( $ ) {
1414
return undefined;
1515
}
1616
return value;
17-
},
18-
nestData = function( elem, type, data, parts, value, seen ) {
17+
},
18+
// Access nested data
19+
nestData = function( elem, type, data, parts, value, seen, fullName ) {
1920
var name = parts.shift();
21+
// Keep track of the dot separated fullname. Used to uniquely track seen values
22+
// and if they should be converted to an array or not
23+
fullName = fullName ? fullName + '.' + name : name;
2024

21-
if ( parts.length ) {
25+
if (parts.length ) {
2226
if ( ! data[ name ] ) {
2327
data[ name ] = {};
2428
}
29+
2530
// Recursive call
26-
nestData( elem, type, data[ name ], parts, value, seen );
31+
nestData( elem, type, data[ name ], parts, value, seen, fullName);
2732
} else {
2833

2934
// Handle same name case, as well as "last checkbox checked"
3035
// case
31-
if ( name in seen && type != "radio" && ! $.isArray( data[ name ] )) {
36+
if ( fullName in seen && type != "radio" && ! $.isArray( data[ name ] )) {
3237
if ( name in data ) {
3338
data[ name ] = [ data[name] ];
3439
} else {
3540
data[ name ] = [];
3641
}
3742
} else {
38-
seen[ name ] = true;
43+
seen[ fullName ] = true;
3944
}
4045

4146
// Finally, assign data

dom/form_params/form_params_test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,14 @@ test("same input names to array", function() {
8181
same(formParams.param1, ['first', 'second', 'third']);
8282
});
8383

84+
test("#17 duplicate sub-keys", function() {
85+
$("#qunit-test-area").html("//jquery/dom/form_params/test/basics.micro",{});
86+
var formParams = $("#qunit-test-area form").formParams(true);
87+
ok(!$.isArray(formParams.test.first), 'First value is not an array');
88+
equals(formParams.test.first, 'test_first', 'First test value correct');
89+
ok(!$.isArray(formParams.bla.first), 'Second value is not an array');
90+
equals(formParams.bla.first, 'bla_first', 'Second test value correct');
91+
console.log(formParams);
92+
});
93+
8494
});

dom/form_params/test/basics.micro

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,7 @@
3737
<input type='text' name='param1' value='first' />
3838
<input type='text' name='param1' value='second' />
3939
<input type='text' name='param1' value='third' />
40+
41+
<input type='text' name='test[first]' value='test_first' />
42+
<input type='text' name='bla[first]' value='bla_first' />
4043
</form>

0 commit comments

Comments
 (0)