从多个表单字段中抓取数据并动态创建JSON字符串

时间:2013-02-21 19:26:50

标签: javascript jquery html json html5

我想使用具有相同cla的多个输入fiels创建一个JSON字符串。请允许我向您展示我的HTML解释

<div>
    Email:<input title="QA" type="text" class="email">
    Name: <input type="text" class="name">
</div>

<div>
    Email:<input title="DEV" type="text" class="email">
    Name: <input type="text" class="name">
</div>

<div>
    Email:<input title="PROD" type="text" class="email">
    Name: <input type="text" class="name">
</div>

目前我的JavaScript如下:

 var ServerUser = [];

 $("input[class=email]").each(function() {
    var id = $(this).attr("title");
    var email = $(this).val();

    tmp = {};
    tmp['id '] = id;
    tmp['email '] = email;

    ServerUser.push(tmp);
 });

然而它产生以下结果

[{title: QA, email: 'a@a.com'}, {title: PROD, email: 'b@b.com'},{title: DEV, email: 'c@c.com'}]

我想做的事情如下

[{title: QA, email: 'a@a.com', name: 'Paul'}, {title: PROD, email: 'b@b.com', name: 'Mark'},{title: DEV, email: 'c@c.com', name: 'Mike'}]

名称值来自相应的名称输入字段。

如何解决此问题?感谢您的帮助并阅读本文。

问候。

3 个答案:

答案 0 :(得分:5)

var inputs = $('input.email'), tmp;
$.each(inputs, function(i, obj) {
  tmp = {
    'title': $(obj).attr('title'),
    'email': $(obj).val(),
    'name' : $(obj).siblings('.name').val()
  };

  ServerUser.push(tmp);
});

应该这样做

答案 1 :(得分:0)

为什么你不通过将变量插入prewrited字符串手动完成?

按每个标题重命名输入。

示例:

var onejson =“[{title: QA ,电子邮件: emailQA ,名称: nameQA },{title: DEV ,电子邮件: emailDEV ,名称: nameDEV },{title: PRO ,电子邮件: emailPRO ,名称: namePRO }];

我知道这是一个小步骤,但我认为这不是一个好的解决方案,我会像我所描述的那样做。希望有所帮助。

答案 2 :(得分:0)

这是一种糟糕的编程习惯,因为您的输入字段应该具有可用于获取其值的可辨认的唯一标识符,但是对于使用Next Sibling Selector的示例,您可以选择div中的下一个输入元素

示例:

 var ServerUser = [];
    $("input[class=email]").each(function() {

    var id = $(this).attr("title");
    var email = $(this).val();
    var name = $(this).parent().first().find('input:last').val();

    tmp = {};
    tmp['TaskID'] = id;
    tmp['ClientEmail'] = email;
    tmp['ClientName'] = name;

    ServerUser.push(tmp);
 });

这是一个很长的选择器,并且可能有更好的方法来构建表单,因此您不需要这样做,但只要名称输入是您将要拥有的最后一个,这将是工作。