【问题标题】:Why "for in" inside "for loop" can't change each input value in form element with each object value为什么“for循环”中的“for in”不能用每个对象值更改表单元素中的每个输入值
【发布时间】:2020-06-17 19:38:58
【问题描述】:

大家好!
我想制作一些function(),这对于使用每个Object值动态更改所选表单中的每个input值很有用,但遗憾的是我下面的示例代码只显示"pineapple"

document.getElementById("change-val").addEventListener("click", function(event) {
  let dataObj = {
    fruit1: "melon",
    fruit2: "mango",
    fruit3: "pineapple"
  };
  let FormInput = document.getElementsByTagName("input");

  for (let index = 0; index < FormInput.length; index++) {
      for (let keyObj in dataObj) {
          FormInput[index].value = dataObj[keyObj];       
      }
  }
});
<button id="change-val">Change Value</button>
<form>
  <input type="text" value="apple"/>
  <input type="text" value="watermelon"/>
  <input type="text" value="banana"/>
</form>

【问题讨论】:

  • 嵌套循环一直循环到最后一个属性[fruit3] === pineapple
  • 想要的结果是什么?

标签: javascript html for-loop dom ecmascript-6


【解决方案1】:

您不应该使用嵌套循环。使用一个循环来获取索引对应的属性。

您可以使用Object.values() 获取属性值数组。

document.getElementById("change-val").addEventListener("click", function(event) {
  let dataObj = {
    fruit1: "melon",
    fruit2: "mango",
    fruit3: "pineapple"
  };
  let FormInput = document.getElementsByTagName("input");
  let fruits = Object.values(dataObj);

  for (let index = 0; index < FormInput.length; index++) {
    FormInput[index].value = fruits[index];
  }
});
<button id="change-val">Change Value</button>
<form>
  <input type="text" value="apple" />
  <input type="text" value="watermelon" />
  <input type="text" value="banana" />
</form>

【讨论】:

  • 那么,如果对象键像{green_fruit: "melon", dark_green_fruit: "mango", yellow_fruit: "pineapple"},我应该再次使用for loop 来获取每个对象键吗?是一样的,不是吗?
  • 那些应该如何对应于输入?对象不一定保持其属性顺序。
  • 我已将其更新为使用 Object.values(),因此键的名称不相关。
  • 啊,谢谢,没想到用Object.values()
猜你喜欢
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2021-02-27
相关资源
最近更新 更多