From 3aa06cead430a09f6033f39930cebd72d95528fd Mon Sep 17 00:00:00 2001 From: Thomas Bruyelle Date: Fri, 13 Jan 2012 18:28:22 +0100 Subject: [PATCH 1/3] ignore idea file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9e16a54..68f610f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea .hg .hgignore +.iml From ba4aad467bb2a03e0006ecf6f6091a6d67e65f5f Mon Sep 17 00:00:00 2001 From: Thomas Bruyelle Date: Fri, 13 Jan 2012 18:30:13 +0100 Subject: [PATCH 2/3] add new option forceCheckBoxValue (default false) to use the real checkbox value in case of true/false value --- src/form2js.js | 42 +++++++++++++++++++++++++----------------- src/jquery.toObject.js | 5 +++-- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/form2js.js b/src/form2js.js index c41106d..7a21df7 100644 --- a/src/form2js.js +++ b/src/form2js.js @@ -38,8 +38,9 @@ var form2js = (function() * @param skipEmpty {Boolean} should skip empty text values, defaults to true * @param nodeCallback {Function} custom function to get node value * @param useIdIfEmptyName {Boolean} if true value of id attribute of field will be used if name of field is empty + * @param forceCheckBoxValue {Boolean} if true the real value of checkbox is used in case of true|false checkboxes */ - function form2js(rootNode, delimiter, skipEmpty, nodeCallback, useIdIfEmptyName) + function form2js(rootNode, delimiter, skipEmpty, nodeCallback, useIdIfEmptyName, forceCheckBoxValue) { if (typeof skipEmpty == 'undefined' || skipEmpty == null) skipEmpty = true; if (typeof delimiter == 'undefined' || delimiter == null) delimiter = '.'; @@ -56,12 +57,12 @@ var form2js = (function() { while(currNode = rootNode[i++]) { - formValues = formValues.concat(getFormValues(currNode, nodeCallback, useIdIfEmptyName)); + formValues = formValues.concat(getFormValues(currNode, nodeCallback, useIdIfEmptyName, forceCheckBoxValue)); } } else { - formValues = getFormValues(rootNode, nodeCallback, useIdIfEmptyName); + formValues = getFormValues(rootNode, nodeCallback, useIdIfEmptyName, forceCheckBoxValue); } return processNameValues(formValues, skipEmpty, delimiter); @@ -213,28 +214,28 @@ var form2js = (function() return result; } - function getFormValues(rootNode, nodeCallback, useIdIfEmptyName) + function getFormValues(rootNode, nodeCallback, useIdIfEmptyName, forceCheckBoxValue) { - var result = extractNodeValues(rootNode, nodeCallback, useIdIfEmptyName); - return result.length > 0 ? result : getSubFormValues(rootNode, nodeCallback, useIdIfEmptyName); + var result = extractNodeValues(rootNode, nodeCallback, useIdIfEmptyName, forceCheckBoxValue); + return result.length > 0 ? result : getSubFormValues(rootNode, nodeCallback, useIdIfEmptyName, forceCheckBoxValue); } - function getSubFormValues(rootNode, nodeCallback, useIdIfEmptyName) + function getSubFormValues(rootNode, nodeCallback, useIdIfEmptyName, forceCheckBoxValue) { var result = [], currentNode = rootNode.firstChild; - + while (currentNode) { - result = result.concat(extractNodeValues(currentNode, nodeCallback, useIdIfEmptyName)); + result = result.concat(extractNodeValues(currentNode, nodeCallback, useIdIfEmptyName, forceCheckBoxValue)); currentNode = currentNode.nextSibling; } return result; } - function extractNodeValues(node, nodeCallback, useIdIfEmptyName) { - var callbackResult, fieldValue, result, fieldName = getFieldName(node, useIdIfEmptyName); + function extractNodeValues(node, nodeCallback, useIdIfEmptyName, forceCheckBoxValue) { + var callbackResult, fieldValue, result, fieldName = getFieldName(node, useIdIfEmptyName, forceCheckBoxValue); callbackResult = nodeCallback && nodeCallback(node); @@ -242,15 +243,15 @@ var form2js = (function() result = [callbackResult]; } else if (fieldName != '' && node.nodeName.match(/INPUT|TEXTAREA/i)) { - fieldValue = getFieldValue(node); + fieldValue = getFieldValue(node, forceCheckBoxValue); result = [ { name: fieldName, value: fieldValue} ]; } else if (fieldName != '' && node.nodeName.match(/SELECT/i)) { - fieldValue = getFieldValue(node); + fieldValue = getFieldValue(node, forceCheckBoxValue); result = [ { name: fieldName.replace(/\[\]$/, ''), value: fieldValue } ]; } else { - result = getSubFormValues(node, nodeCallback, useIdIfEmptyName); + result = getSubFormValues(node, nodeCallback, useIdIfEmptyName, forceCheckBoxValue); } return result; @@ -264,10 +265,10 @@ var form2js = (function() } - function getFieldValue(fieldNode) + function getFieldValue(fieldNode, forceCheckBoxValue) { if (fieldNode.disabled) return null; - + switch (fieldNode.nodeName) { case 'INPUT': case 'TEXTAREA': @@ -275,7 +276,14 @@ var form2js = (function() case 'radio': case 'checkbox': if (fieldNode.checked && fieldNode.value === "true") return true; - if (!fieldNode.checked && fieldNode.value === "true") return false; + + if (forceCheckBoxValue) { + if (fieldNode.checked && fieldNode.value === "false") return false; + if (!fieldNode.checked && fieldNode.value === "true") return ''; + } else { + if (!fieldNode.checked && fieldNode.value === "true") return false; + } + if (fieldNode.checked) return fieldNode.value; break; diff --git a/src/jquery.toObject.js b/src/jquery.toObject.js index 3e5c9de..bbd04d0 100644 --- a/src/jquery.toObject.js +++ b/src/jquery.toObject.js @@ -38,7 +38,8 @@ delimiter: ".", skipEmpty: true, nodeCallback: null, - useIdIfEmptyName: false + useIdIfEmptyName: false, + forceCheckBoxValue: false }; if (options) @@ -49,7 +50,7 @@ switch(settings.mode) { case 'first': - return form2js(this.get(0), settings.delimiter, settings.skipEmpty, settings.nodeCallback, settings.useIdIfEmptyName); + return form2js(this.get(0), settings.delimiter, settings.skipEmpty, settings.nodeCallback, settings.useIdIfEmptyName, settings.forceCheckBoxValue); break; case 'all': this.each(function(){ From 2af9cffd8e69764e229f03f3c4d4f6249ad72d2a Mon Sep 17 00:00:00 2001 From: Thomas Bruyelle Date: Fri, 13 Jan 2012 18:44:52 +0100 Subject: [PATCH 3/3] ignore idea file --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 68f610f..792774b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ .idea .hg .hgignore -.iml +*.iml