0

我目前正在研究一个 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 循环完成后每个用户的修复链接。这是一项非常琐碎的任务,但我没有找到合适的解决方案。

你有什么提示吗?问候

4

1 回答 1

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]);
}
于 2012-04-09T13:47:01.623 回答