javascript - 动态绑定(bind) onclick 事件为 for 循环中的所有按钮提供相同的值

标签 javascript jquery html button dynamic

我正在尝试动态创建按钮并在点击事件中为每个按钮分配一个警报功能。这是 javascript 函数:

function GetTabs(tabObj) {
   for (var t = 0; t < tabObj.views.view.length; t++) {               
        var podObjlen = '';
        var element = document.createElement('input');
        element.id = "btn" + t;
        element.setAttribute("type", "button");
        element.setAttribute("value", "Click");
        element.setAttribute("name", "button");
        podObjlen = tabObj.views.view[t].pod.length;
        document.body.appendChild(element);
        document.getElementById('btn' + t).onclick = (this, "onclick", function {
           alert(podObjlen);                    
        });                
    }
}

无论我单击哪个按钮,警报总是向我显示所有按钮循环中的最后一个值,即长度值被分配给所有警报。它不会为按钮的每个警报分配独立的值。 我尝试了几种方法,例如:

element.getElementById('btn' + t).onclick = (this, "onclick", function {
    alert(podObjlen);                    
}); 
element.getElementById('btn' + t).onclick = new function () {
    alert(podObjlen);
}

(这里它在警报框中显示了正确的值,但我不断收到警报,但是当我实际单击按钮时警报无法触发,即警报在我的按钮呈现时触发。 希望我说清楚。我想要的是我需要在循环运行时获取实际值以提醒每个按钮。

最佳答案

Adnan 您观察到的是 javascript 中臭名昭著的循环问题。发生这种情况是由于对 javascript 的工作原理了解较少,在此之前的帖子中也对此进行了讨论

Javascript infamous Loop issue?

关于javascript - 动态绑定(bind) onclick 事件为 for 循环中的所有按钮提供相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11411694/

相关文章:

javascript - 在 Babel 中使用 es7 函数

javascript - Bootstrap 轮播控件没有响应

jquery - Uploadify、Flash session 和 Rails 2.3.8

javascript - node.js 限制路由,以便可以使用 jquery 加载但无法通过 url 访问

javascript - addEventListener 单击仅适用于类更改一次

javascript - 多个按钮仅在代码中打开最近的模态

html - 具有 CSS opacity 属性的 <video> 仅在 Chrome 54 for Mac 上显得异常暗淡

javascript - 将数据附加到数组,否则在 ES6 中创建一个数组

javascript - 如何用类部分替换 YUIDoc 的索引部分?

javascript - 通过 snap.svg 旋转加载的 svg 的 ID