列出几个“GM_listValues”,调用一个删除自己的函数

时间:2012-04-09 13:24:38

标签: javascript greasemonkey

我目前正在开发一个Greasemonkey脚本,它允许将用户添加到一个忽略列表中,该列表将阻止他们的注释被渲染。

我通过“GM_setValue”存储他们的用户ID。一切都运行得很好,但我有问题来渲染我的脚本中的“管理你的禁令列表”部分以赦免用户。

我遇到麻烦的代码块:

var banList = GM_listValues(); // Array of Usernames
var manageBans = $("#content_content"); //The <div> I want to render the Banlist in.
manageBans.append("<h4>Manage ignorelist</h4>");


for (var i=0; i < banList.length; i++) {
    var currentUser = banList[i];   

    manageBans.append($('<b>'+currentUser+'</b><a href ="javascript:void(null)"><img src="/redaktion/style/delete.png" width="16" height="16" alt="unblock_user"></a></br>').click(function(){ unbanUser(currentUser)}));
}


var unbanUser = function(name) {                    
        GM_deleteValue(name);
};      

所以基本上这个工作正常,所有被禁止的用户都在列表中呈现,我可以点击解除绑定。但是,一旦我点击任何用户调用“unbanUser”,列表中的最后一个用户就会被取消,而不是我点击的用户。

我猜变量“currentUser”始终是列表中的姓氏,我希望它在for循环完成后成为每个用户的修复链接。 这是一项相当简单的任务,但我找不到合适的解决方案。

你有暗示吗? 迎接

1 个答案:

答案 0 :(得分:1)

在循环结束时,currentUser在每次迭代时都会被覆盖。在click函数中,您指的是currentUser,它等于currentUser的最后定义。

要修复它,请使用闭包:

function doSomething(currentUser) {
    manageBans.append($('<b>'+currentUser+'</b><a href="javascript:void(null)"><img src="/redaktion/style/delete.png" width="16" height="16" alt="unblock_user"></a></br>').click(function(){
        unbanUser(currentUser)
    }));
}

for (var i=0; i < banList.length; i++) {
    doSomething(banList[i]);
}