2012-04-09 15 views
0

私は現在Greasemonkeyスクリプトに取り組んでいます。ユーザーはコメントを表示しないように無視リストに追加できます。自分自身を削除する関数を呼び出すいくつかの "GM_listValues"のリスト

"GM_setValue"でuserIDを保存します。すべてうまくいっていますが、スクリプトの「禁止リストを管理する」という部分をユーザーに許してもらうための問題があります。

私が持つ悩み持っているコードブロック:

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-loopの終了後に各ユーザーの修正リンクにしたいと思っています。 これは非常に簡単な作業ですが、私は適切な解決策を見つけることができません。

私にはヒントがありますか? おむつ

答えて

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