javascript - Firefox 扩展 - 面板元素 onclick 被覆盖

标签 javascript firefox firefox-addon firefox-addon-sdk add-on

我正在尝试将 onclick 事件分配给动态创建的面板元素:

for(var c = 0; c < data.length; c++) {
    var user = data[c];
    document.querySelector('#userList').innerHTML += '<li class="user" id="button-login-' + c + '"><img src="user.png" /><span>' + user.username + '</span></li>';
    document.querySelector('#button-login-' + c).onclick = function() {
        self.port.emit('button', {
            'action': 'login',
            'data': {
                'username': user.username
            }
        });
    };
}

但似乎第一个 onclick 事件被最后一个覆盖了...... 有帮助吗?

在新代码中我尝试了这个:

for(var c = 0; c < data.length; c++) {
    user = data[c];
    document.querySelector('#userList').innerHTML += '<li class="user" id="button-login-' + c + '"><img src="user.png" /><span>' + user.username + '</span></li>';
    document.querySelector('#button-login-' + c).onclick = function() {
        self.port.emit('button', {
            'action': 'login',
            'data': {
                'username': user.username
            }
        });
    };
}

还有这个:

for(var c = 0; c < data.length; c++) {
    let user = data[c];
    document.querySelector('#userList').innerHTML += '<li class="user" id="button-login-' + c + '"><img src="user.png" /><span>' + user.username + '</span></li>';
    document.querySelector('#button-login-' + c).onclick = function() {
        self.port.emit('button', {
            'action': 'login',
            'data': {
                'username': user.username
            }
        });
    };
}

按钮不起作用...

最佳答案

发生这种情况是因为闭包在 Javascript 中的工作方式,而不是特定于 sdk 或扩展的东西。

请参阅“Creating closures in loops: A common mistake”以了解您问题的一般解决方案。

为了更简单的解决方案更改

var user = data[c];

let user = data[c];

关于javascript - Firefox 扩展 - 面板元素 onclick 被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19002687/

相关文章:

javascript - 展开/折叠 html 表内的 div 从数据库检索数据

javascript - 如何使用 $window 从模板脚本访问 AngularJS 作用域变量

javascript - 在 Firefox 中,剑道按钮文本在 IE 和 Chrome 中工作时不会改变

javascript - 使用内容脚本定义全局变量

firefox-addon - 如何使用 Firefox 插件 sdk 重新加载小部件弹出面板?

javascript - 使用addProgressListener和onStatusChange获取页面的DNS查找时间

JavaScript 和数组

Javascript - 检查字符串是否是数组中字符串的一部分

google-chrome - Firebase 身份验证失败,auth/network-request-failed 网络错误(例如超时

JavaScript Canvas : in firefox is empty