我在javascript中遇到错误“无法读取未定义的属性'innerhtml'请帮忙!我是js的新手代码附在下面谢谢

neskvpey  于 2021-09-23  发布在  Java
关注(0)|答案(3)|浏览(235)

此问题已在此处找到答案

循环内部javascript闭包–简单实用示例(44个答案)
两天前关门了。
我在js(附加代码)的第42行遇到这个错误。请帮忙。我是js的新手

let nums = document.getElementsByClassName("grid-items");
var i = 0,
  num = 0;
for (i = 0; i < nums.length; i++) {
  console.log(nums[i]);
  nums[i].addEventListener("click", function() {
    num = nums[i].innerHTML;
    console.log(num);
  })
}
<button class="grid-items" id="number0">0</button>
<button class="grid-items" id="number1">1</button>
<button class="grid-items" id="number2">2</button>
<button class="grid-items" id="number3">3</button>
<button class="grid-items" id="number4">4</button>
<button class="grid-items" id="number5">5</button>
<button class="grid-items" id="number6">6</button>
<button class="grid-items" id="number7">7</button>
<button class="grid-items" id="number8">8</button>
<button class="grid-items" id="number9">9</button>

此外,如果有人有更好的想法,从点击js打印数字,你可以帮助这一点。非常感谢。

yuvru6vn

yuvru6vn1#

您可以使用以下选项:

let nums=document.getElementsByClassName("grid-items");
var i=0,num=0;
for(i=0;i<nums.length;i++){
    console.log(nums[i]);
    nums[i].addEventListener("click", function (){
        num=this.innerHTML;
        console.log(num);
    })    
}
2ledvvac

2ledvvac2#

单击处理程序使用变量 i 从全局范围,在单击时(循环完成时),此变量指向数组边界的后面,这会导致异常。
但是如果你把这个变量 i 本地到循环体,则每个处理程序都有自己的 i 具有特定于每个迭代的值。

let nums = document.getElementsByClassName("grid-items")
for (let i = 0; i < nums.length; i++) {
  nums[i].addEventListener("click", function() {
    console.log(nums[i].innerHTML)
  })
}
<button class="grid-items" id="number0">0</button>
<button class="grid-items" id="number1">1</button>
<button class="grid-items" id="number2">2</button>
<button class="grid-items" id="number3">3</button>
<button class="grid-items" id="number4">4</button>
<button class="grid-items" id="number5">5</button>
<button class="grid-items" id="number6">6</button>
<button class="grid-items" id="number7">7</button>
<button class="grid-items" id="number8">8</button>
<button class="grid-items" id="number9">9</button>

注意使用 let 而不是 var ,因为 var 具有更大的范围,不会是局部循环。

pjngdqdw

pjngdqdw3#

你可以用 forEach 循环以最小化代码并使其更干净。
请参见=>

let nums = document.querySelectorAll(".grid-items");
nums.forEach(element =>{
   element.onclick = (e)=>{
     console.log(parseInt(element.textContent))
   }})

注:我用过 parseInt() 方法从返回的字符串中解析整数 .innerText

相关问题