0

我想使用具有相同 cla 的多个输入字段创建一个 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'}]

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

我该如何解决这个问题?感谢您的帮助和阅读本文。

问候。

4

3 回答 3

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);
});

应该这样做

于 2013-02-21T19:34:18.017 回答
0

为什么您不通过将变量插入预写字符串来手动执行此操作?

按每个标题重命名输入。

例子:

var onejson = "[{title: QA , email: emailQA , name: nameQA }, {title: DEV , email: emailDEV , name: nameDEV }, {title: PRO , email: emailPRO , name: namePRO }];

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

于 2013-02-21T19:35:33.293 回答
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);
 });

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

于 2013-02-21T19:59:34.267 回答