0

我有一个带有输入字段的表单,如下所示:

<form "data-qustion_form"=true>
  <input name="question[description]" value="quesd">
  <input name="question[answers][0][description]" value="ansd1">
  <input name="question[answers][1][description]" value="ansd2">
</form>

我正在使用https://github.com/marioizquierdo/jquery.serializeJSON将表单数据转换为 json。还尝试使用https://stackoverflow.com/a/8407771/707636。两者都很好用。但是我无法遍历 json 中的数组。

我关注了js

$("[data-question_form]").on("submit", function(e) {
  var o = $(this).serializeObject();  // $(this).serializeJSON(); both results same
  console.log(o);
  console.log(o["question"]);
  console.log(o["question"]["answers"]);
  $.each(question["answers"], function() {
    console.log("print test");  // I don't see this on console in Chrome inspector
  }
  e.preventDefault();
}

Chrome 检查器中控制台的输出如下:

Object {utf8: "✓", question: Object}
Object {description: "quesd", answers: Array[0]}
[1362289041238: Object, 1362289045644: Object]

进一步扩大[1362289041238: Object, 1362289045644: Object]显示length: 0

如何遍历此数组以读取 jQuery 中的每个答案描述?

4

2 回答 2

1

我无法发现您的代码有任何问题(请参阅示例),无论是使用serializeObject- 与链接答案中的代码 - 还是使用serializeJSON- 来自 GitHub 的代码。但是,您的标记必须进行调整:

<form "data-qustion_form"=true>

至:

<form data-question_form="true">

PS 正如@jchapa 指出的那样,这question["answers"]也是错误的-括号不平衡。但我假设这只是您在此处粘贴的代码,您的实际代码必须是正确的(否则您根本不会得到任何结果)。

  $.each(o["question"]["answers"], function() {
    console.log("print test");  // I don't see this on console in Chrome inspector
  });
});
于 2013-03-03T06:36:07.657 回答
0

好的,我刚刚解决了它,但name对输入元素的属性做了一些小改动。在计数器前添加 []如下:

<input name="question[answers][][0][description]" value="ansd1">
<input name="question[answers][][1][description]" value="ansd2">

现在我可以遍历它了:)

于 2013-03-03T06:35:29.663 回答