javascript - 动态添加 onclick 到元素,传递函数参数

标签 javascript jquery html dom

我有一个预加载的页面,我正在尝试将 onclick 事件添加到具有特定类名的所有节点。但是onclick中的函数应该使用其中的元素节点。

var elemArr=document.getElementsByClassName('ABC');

    for(var i=0;i<elemArr.length;i++){

        elemArr[i].onclick = function()
        {
            console.log(elemArr[i]);  // This is being returned as undefined
            // How can I use elemArr[i] here 
        };
    }

我试过了

for(var i=0;i<elemArr.length;i++){

    printObj=elemArr[i];
    elemArr[i].onclick = function()
    {
        console.log(printObj);
        var newObject = jQuery.extend(true, {}, printObj);
        console.log(newObject );
    };
}

但是没有用。我觉得上面的方法无论如何也行不通。我该如何解决这个问题..?

最佳答案

您应该使用 function 将代码包装在 loop 内,以便为每个事件处理程序创建 i 的新副本,像这样。

var elems = document.getElementsByClassName('elem');

if (elems.length) {
  for (var i = 0, l = elems.length; i < l; i++) {
    (function(i) {
      elems[i].onclick = function() {
        alert('Element #' + i);
      }
    })(i);
  }
}

// Could also use bind for slighlty cleaner code
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

for (var i = 0, l = elems.length; i < l; i++) {
  elems[i].onmousedown = (function(index, e) {
    console.log('MouseDown - Element  #' + index);
  }).bind(elems[i], i);
}
<div class="elem">Elem #1</div>
<div class="elem">Elem #2</div>
<div class="elem">Elem #3</div>

关于javascript - 动态添加 onclick 到元素,传递函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27425774/

相关文章:

javascript - 微调我的灯箱

javascript - Ajax Success 调用后更新 span 标签时出现问题

PHP HTML 显示按钮属性

单击下拉箭头时的 Javascript 事件

javascript - 无法在加载页面期间更改表单子(monad)元素的边框颜色

javascript - jQuery:在来自ajax post的图像上设置不同的大小

javascript - jQuery 函数不适用于两个元素

javascript - 需要创建jquery密码提示(应该很简单)

javascript - 使用 jQuery 检查 img 的 src 是否包含某些文本

javascript - 使用 Javascript/Jquery 进行捏合和缩放,无需插件