Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dist/jquery.serialize-object.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 27 additions & 6 deletions jquery.serialize-object.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,14 @@
named: /^[a-z0-9_]+$/i
};

function FormSerializer(helper, $form) {
function FormSerializer(helper, $form, optionDef) {

// private variables
var data = {},
pushes = {};
pushes = {},
options = {};

options = initializeOptions(optionDef);

// private API
function build(base, key, value) {
Expand Down Expand Up @@ -83,7 +86,17 @@
function encode(pair) {
switch ($('[name="' + pair.name + '"]', $form).attr("type")) {
case "checkbox":
if(!options.encodes.checkbox) {
return pair.value;
}
return pair.value === "on" ? true : pair.value;
case "number":
case "num":
if(!options.encodes.number) {
return pair.value;
}
var num = parseInt(pair.value);
return isNaN(num) ? pair.value : num;
default:
return pair.value;
}
Expand Down Expand Up @@ -113,6 +126,14 @@
function serializeJSON() {
return JSON.stringify(serialize());
}

function initializeOptions(optionDef) {
var options = optionDef === undefined ? {} : optionDef;
options.encodes = options.encodes === undefined ? {} : options.encodes;
options.encodes.checkbox = options.encodes.checkbox === undefined ? true : options.encodes.checkbox;
options.encodes.number = options.encodes.number === undefined ? false : options.encodes.number;
return options;
}

// public API
this.addPair = addPair;
Expand All @@ -123,14 +144,14 @@

FormSerializer.patterns = patterns;

FormSerializer.serializeObject = function serializeObject() {
return new FormSerializer($, this).
FormSerializer.serializeObject = function serializeObject(optionDef) {
return new FormSerializer($, this, optionDef).
addPairs(this.serializeArray()).
serialize();
};

FormSerializer.serializeJSON = function serializeJSON() {
return new FormSerializer($, this).
FormSerializer.serializeJSON = function serializeJSON(optionDef) {
return new FormSerializer($, this, optionDef).
addPairs(this.serializeArray()).
serializeJSON();
};
Expand Down
35 changes: 35 additions & 0 deletions test/integration/encode-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,39 @@ describe("encode", function() {
assert.deepEqual($form.serializeObject(), {a: "on"});
});

it("checkbox inputs as booleans if encode option turned on", function() {
var $form = $('<form><input type="checkbox" name="a" value="on" checked></form>');
assert.deepEqual($form.serializeObject({'encodes': { 'checkbox': true } }), {a: true});
});

it("checkbox inputs as strings if encode option turned off", function() {
var $form = $('<form><input type="checkbox" name="a" value="on" checked></form>');
assert.deepEqual($form.serializeObject({'encodes': { 'checkbox': false } }), {a: "on"});
});

it("checkbox inputs as booleans if encode option not provided", function() {
var $form = $('<form><input type="checkbox" name="a" value="on" checked></form>');
assert.deepEqual($form.serializeObject(), {a: true});
});

it("number inputs as numbers if encode option turned on", function() {
var $form = $('<form><input type="number" name="a" value="6"></form>');
assert.deepEqual($form.serializeObject({'encodes': { 'number': true } }), {a: 6});
});

it("number inputs as strings if encode option turned off", function() {
var $form = $('<form><input type="number" name="a" value="6"></form>');
assert.deepEqual($form.serializeObject({'encodes': { 'number': false } }), {a: "6"});
});

it("number inputs as strings if encode option not provided", function() {
var $form = $('<form><input type="number" name="a" value="6"></form>');
assert.deepEqual($form.serializeObject(), {a: "6"});
});

it("number inputs as empty strings if encode option turned on but empty field", function() {
var $form = $('<form><input type="number" name="a" value=""></form>');
assert.deepEqual($form.serializeObject({'encodes': { 'number': true } }), {a: ""});
});

});