2012-04-09 18 views
0

我目前正在使用一个Greasemonkey脚本,它允许将用户添加到忽略列表,这将阻止他们的评论被呈现。使几个“GM_listValues”列表,调用一个函数来删除自己

我通过“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循环完成后每个用户的修复链接。 这是一项相当简单的任务,但我找不到合适的解决方案。

你有什么暗示吗? Greets

回答

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]); 
} 
+0

谢谢,现在工作正常! – Pickaxe 2012-04-09 13:51:19

相关问题