javascript for in loop returning undefinded

不问归期 提交于 2019-12-02 21:37:05

问题


Looking for help with a for in loop I am using in which returns undefined at the the end.

I have 26 buttons, one button for each letter in the alphabet. I need to scan through the buttons so that when a button is clicked I get the value of that button.

I'm using a class search which returns a node of all the buttons. On doing a console log this returns 26 buttons, which i would expect.

I then set up the for in loop to run through the buttons to add the o'clock to each, at the end of running through them though an undefined is getting added. Can anyone explain to me why as this is giving me a Type error of undefined.

Any ideas please?

var item = document.getElementsByClassName('button');
console.log(item); //shows 26 buttons

for (var i in Object.keys(item)) {
  console.log(item[i]) //shows 26 buttons and 1 undefined 
};


// final code should look like below
for (var i in Object.keys(item)) {
  item[i].onclick = function() {
    console.log(this.value);
  };
}
<div id="container">
  <header>
    <h1>Game</h1>
  </header>

  <div id="stage">

  </div>

  <div id="buttons">
    <input type="button" value="Q" id="Q" class="button">
    <input type="button" value="W" id="W" class="button">
    <input type="button" value="E" id="E" class="button">
    <input type="button" value="R" id="R" class="button">
    <input type="button" value="T" id="T" class="button">
    <input type="button" value="Y" id="Y" class="button">
    <input type="button" value="U" id="U" class="button">
    <input type="button" value="I" id="I" class="button">
    <input type="button" value="O" id="O" class="button">
    <input type="button" value="P" id="P" class="button"><br>
    <input type="button" value="A" id="A" class="button">
    <input type="button" value="S" id="S" class="button">
    <input type="button" value="D" id="D" class="button">
    <input type="button" value="F" id="F" class="button">
    <input type="button" value="G" id="G" class="button">
    <input type="button" value="H" id="H" class="button">
    <input type="button" value="J" id="J" class="button">
    <input type="button" value="K" id="K" class="button">
    <input type="button" value="L" id="L" class="button"><br>
    <input type="button" value="Z" id="Z" class="button">
    <input type="button" value="X" id="X" class="button">
    <input type="button" value="C" id="C" class="button">
    <input type="button" value="V" id="V" class="button">
    <input type="button" value="B" id="B" class="button">
    <input type="button" value="N" id="N" class="button">
    <input type="button" value="M" id="M" class="button">
  </div>
</div>

回答1:


You should not use a for-in loop over a collection. If you do you need to test hasOwnProperty

Instead use a simple loop

var item = document.getElementsByClassName('button');
// or better: var item = document.querySelectorAll('.button');
for (var i=0;i<item.length;i++) {
  item[i].onclick = function(){
     console.log(this.value);
  };
}

var item = document.getElementsByClassName('button');
// or better: var item = document.querySelectorAll('.button');
for (var i = 0; i < item.length; i++) {
  item[i].onclick = function() {
    console.log(this.value);
  };
}
<div id="container">
  <header>
    <h1>Game</h1>
  </header>

  <div id="stage">

  </div>

  <div id="buttons">
    <input type="button" value="Q" id="Q" class="button">
    <input type="button" value="W" id="W" class="button">
    <input type="button" value="E" id="E" class="button">
    <input type="button" value="R" id="R" class="button">
    <input type="button" value="T" id="T" class="button">
    <input type="button" value="Y" id="Y" class="button">
    <input type="button" value="U" id="U" class="button">
    <input type="button" value="I" id="I" class="button">
    <input type="button" value="O" id="O" class="button">
    <input type="button" value="P" id="P" class="button"><br>
    <input type="button" value="A" id="A" class="button">
    <input type="button" value="S" id="S" class="button">
    <input type="button" value="D" id="D" class="button">
    <input type="button" value="F" id="F" class="button">
    <input type="button" value="G" id="G" class="button">
    <input type="button" value="H" id="H" class="button">
    <input type="button" value="J" id="J" class="button">
    <input type="button" value="K" id="K" class="button">
    <input type="button" value="L" id="L" class="button"><br>
    <input type="button" value="Z" id="Z" class="button">
    <input type="button" value="X" id="X" class="button">
    <input type="button" value="C" id="C" class="button">
    <input type="button" value="V" id="V" class="button">
    <input type="button" value="B" id="B" class="button">
    <input type="button" value="N" id="N" class="button">
    <input type="button" value="M" id="M" class="button">
  </div>
</div>


来源:https://stackoverflow.com/questions/35818176/javascript-for-in-loop-returning-undefinded

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!