Javascript 事件处理程序在循环中工作不正常

Javascript 事件处理程序在循环中工作不正常,javascript,css,Javascript,Css,我试图通过foor循环将一些类应用于html元素。问题是循环变量不能正常工作 “严格使用” window.onload=函数(){ var elements=document.getElementsByTagName(“div”) 对于(var i=0;i

我试图通过foor循环将一些类应用于html元素。问题是循环变量不能正常工作

“严格使用”
window.onload=函数(){
var elements=document.getElementsByTagName(“div”)
对于(var i=0;i
div{
背景色:红色;
}
.0级{
背景颜色:蓝色;
}
.1级{
背景颜色:紫色;
}

正如@Patrick建议的那样:

  window.onload = function(){
    var elements = document.getElementsByTagName("div")

    for(var i = 0; i < elements.length; i++){
      elements[i].addEventListener("click", a.bind(window, elements[i],i), false)
    }

    function a(e, x){
      if(!e.className){
        e.className = "class".concat(x)
      }
      else {
        e.classList.remove(e.className)
      }
    }
  }
window.onload=function(){
var elements=document.getElementsByTagName(“div”)
对于(var i=0;i
您正在调用函数a并将其结果指定为事件处理程序


使用bind,您可以创建一个函数,该函数将调用
a
作为参数传递元素和索引。

如@Patrick所建议的,执行以下操作:

  window.onload = function(){
    var elements = document.getElementsByTagName("div")

    for(var i = 0; i < elements.length; i++){
      elements[i].addEventListener("click", a.bind(window, elements[i],i), false)
    }

    function a(e, x){
      if(!e.className){
        e.className = "class".concat(x)
      }
      else {
        e.classList.remove(e.className)
      }
    }
  }
window.onload=function(){
var elements=document.getElementsByTagName(“div”)
对于(var i=0;i
您正在调用函数a并将其结果指定为事件处理程序


使用bind,您可以创建一个调用
a
作为参数传递元素和索引的函数。

您有
a(this,i)
this
窗口
全局对象而不是元素我是否删除了它,只是放了“i”?我想您的意思是做类似
a.bind(elements[i],i)的事情
我想通过在函数中使用循环变量将类添加到元素中,如果您只执行
,bind方法会出现以下错误“无法在数字“1”上创建属性“className”。addEventListener(“单击”,a,false)
并在函数中使用
this
,然后停止向类添加索引,然后添加一个公共字符串,这会变得容易得多。另外,字符串也不会连接。你有
a(this,i)
this
窗口
全局对象不是元素我是否要删除它并放上“i”?我想你的意思是做类似
a.bind(elements[i],i)
的事情,我想通过在函数中使用循环变量向元素添加类,bind方法给了我一个错误“无法在数字“1”上创建属性'className',如果你只是
。addEventListener(“click”,a,false)
并在函数中使用
this
,停止向类添加索引,而是添加一个公共字符串,这会变得容易得多。而且,字符串不会连接。