【问题标题】:Assigning input values in a for-loop在 for 循环中分配输入值
【发布时间】:2015-06-14 05:30:04
【问题描述】:

我有一个哈希值,我想获取其中的每一个值并将它们放在一个文本字段中。我现在写出的一个问题是这些值在 HTML 中是硬编码的,因此如果用户要在文本字段中进行更改,则在提交表单时它们将被忽略。有什么方法可以插入我的哈希中的数据,而无需将它们显式写入value 属性,但仍会在提交时进行处理?

HTML

<form action="">
  <table></table><br />
  <input type="submit" />
</form>

JS

var data = [{name: "Object One", num: 1}, {name: "Object Two", num: 2}, {name: "Object Three",num: 3}];

for (var i = 0; i < data.length; i++) {
  var dataNum   = "<td><input type='text' value='" + data[i]["num"] + "'></td>",
      dataName  = "<td><input type='text' value='" + data[i]["name"] + "'></td>";
  var $tr = "<tr>" + dataNum + dataName + "</tr>";

  $("table").append($tr);
}

【问题讨论】:

  • 我没有得到“没有将它们显式写为值属性”部分,但要作为表单数据的一部分提交,输入必须指定 name 属性。
  • 正确。动态生成元素的值也可以使用 .on 更新
  • @CarlEdwards - 这并没有让它更清楚。如果你不想要 value 属性 - 不要写它。
  • value 属性仅用作初始默认值。如果用户编辑该字段,则更改后的值将被提交。
  • @CarlEdwards - 你错误地认为jQuery.val() 做的事情不是为 html 输入分配元素值属性。

标签: javascript jquery html forms


【解决方案1】:

您的脚本按预期工作(至少我理解您的意图)。我必须为每个使用迭代器创建不同的输入的输入添加名称属性。我不确定您使用什么语言来处理表单,但我知道有些人会收到同名的属性列表 (&amp;name=Jeff&amp;name=Jon&amp;name=...)。

var dataNum   = "<td><input type='text' name='num" + [i] + "' value='" + data[i]["num"] + "'></td>"

我还在提交按钮上附加了一个点击处理程序,只是为了表明它可以工作。 value 属性对于填充表单的初始值是必需的。如果在表单呈现后更改了值,则更改后的值是与表单一起提交的。

使用此fiddle 进行测试。

我不确定您为什么要避免在 DOM 中使用 value=""。您可以这样做,但是您必须在呈现表单后设置值,方法是创建另一个循环遍历每一行,遍历该行的每个单元格,然后显示设置值。

您的地图结构肯定需要改变。它会添加额外的代码并且完全没有必要。

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2015-07-07
    相关资源
    最近更新 更多