Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 用数值将表单序列化为json_Html_Jquery_Json_Forms - Fatal编程技术网

Html 用数值将表单序列化为json

Html 用数值将表单序列化为json,html,jquery,json,forms,Html,Jquery,Json,Forms,这是一个经常被问到的问题,但是我还没有发现如何从一个表单中创建一个json主体,没有在值上加引号,而是在属性中加引号 我想创建一个类似这样的JSON主体 { "salary1":20100, "salary2":1000, "bill":50000 } 但我所有的尝试都是返回属性和值(带引号或不带引号),这是我不需要的 这就是我所拥有的 <form action="#" method="post&q

这是一个经常被问到的问题,但是我还没有发现如何从一个表单中创建一个json主体,没有在值上加引号,而是在属性中加引号

我想创建一个类似这样的JSON主体

{
"salary1":20100,
"salary2":1000,
"bill":50000
}
但我所有的尝试都是返回属性和值(带引号或不带引号),这是我不需要的

这就是我所拥有的

<form action="#" method="post">
    <div>
        <label for="name">Salary1</label>
        <input type="number" name="salary1" id="salary1" value=25000  data-value-type="number"  />
    </div>
    <div>
        <label for="salary2">Salary2</label>
        <input type="number" name="salary2" id="salary2" value=18200 data-value-type="number"   />
    </div>
    <div>
        <label for="Bill">Bill</label>
        <input type="number" name="bill" id="bill" value=35000  data-value-type="number"  />
    </div>
    <p>
        <input type="submit" value="Send" />
    </p>
</form>

jQuery.fn.serializeObject = function() {
  var arrayData, objectData;
  arrayData = this.serializeArray();
  objectData = {};

  $.each(arrayData, function() {
    var value;

    if (this.value != null) {
      value = this.value;
    } else {
      value = '';
    }

    if (objectData[this.name] != null) {
      if (!objectData[this.name].push) {
        objectData[this.name] = [parseFloat(objectData[this.name])];
      }

      objectData[this.name].push(parseFloat(value));
    } else {
      objectData[this.name] = value;
    }
  });

  return objectData;
};
这是回报

{ salary1: "25000", salary2: "18200", bill: "35000"}

您只是在代码的
else
分支中缺少了一个
parseFloat
调用-没有它,它将添加字段的内容,该字段始终是一个字符串

jQuery.fn.serializeObject=function(){
var arrayData,objectData;
arrayData=this.serializeArray();
objectData={};
$.each(数组数据,函数(){
var值;
如果(this.value!=null){
value=this.value;
}否则{
值=“”;
}
if(objectData[this.name]!=null){
如果(!objectData[this.name].push){
objectData[this.name]=[parseFloat(objectData[this.name]);
}
objectData[this.name].push(parseFloat(value));
}否则{

objectData[this.name]=parseFloat(value);//谢谢!但这太奇怪了。你做的代码片段看起来很完美,但我的渲染结果是这样的。将parseFloat添加到值时。{salary1:25000,salary2:18200,bill:35000}@Dymond可能会尝试
JSON。stringify
结果,看看是否正确works@Dymond还有,你说的什么意思“我的呈现”?这可能只是您使用的任何东西如何表示数据。ie
console.log
将键括在引号中,但就Javascript而言,
{foo:1}
{foo:1}可能没有其他东西(请注意,在创建
objectData
时没有引号)
都是一样的。JSON规定只有这两个示例中的后一个是有效的。哈,是的,我刚刚注意到SO控制台和chrome控制台的显示方式不同。不过,我的观点是——如何表示javascript对象取决于呈现层
{ salary1: "25000", salary2: "18200", bill: "35000"}