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 に答える