3

私は次のコードを持っています:

$(document).ready(function () {
    for (i = 1; i <= number_of_banners; i++) {
    var selector = "#link_" + i;
    $(selector).click(function () {
        alert(i);
        });
    }
});

ただし、alert()はforループから「i」変数を取得できません。.click関数内でforループのi変数を使用するにはどうすればよいですか?

4

5 に答える 5

4

jQuery .on(event、data、handler)を使用すると、簡単に実行できます。

$(document).ready(function () {
    for (var i = 1; i <= number_of_banners; i++) {
        var selector = "#link_" + i;
        $(selector).on('click', {id: i}, function (e) {
            alert(e.data.id);
        });
    }
});

作業サンプル

于 2012-09-18T05:53:30.450 に答える
4

このコードを使用できます:

$(document).ready(function () {
    for (var i = 1; i <= number_of_banners; i++) {
        var selector = "#link_" + i;
        $(selector).on('click', {id: i}, function (e) {
            alert(e.data.id);
        });
    }
});

onメソッドを使用する代わりに、メソッドを使用してクリック引数を使用するonclick必要があります

于 2012-10-24T06:06:45.573 に答える
3

これは、 JavaScriptを持ち上げるJavaScriptスコープメカニズムの事実が原因である可能性がありますか?

例えば:

JavaScriptは、JavaやC#などの他の言語に通常慣れているため、ブロックスコープではなく関数スコープを使用するため、機能しません。それを機能させるには、新しい匿名関数を明示的に作成して新しいスコープを作成し、それに応じて変数をバインドする必要があります。

私はこれが上記の質問に直接答えないことを知っていますが、他の人がこの質問に出くわしたとしても、それでも役立つかもしれません。

于 2012-09-18T05:54:57.727 に答える
1

iにアクセスできるスコープ内で関数が宣言されている限り、無名関数にパラメーターとして渡すことができると思います。

function (i) {
   alert(i);
}
于 2012-09-18T05:33:58.530 に答える
1

簡単な解決策は、eventDataを使用して、その中に電流を格納するiことです。

$(document).ready(function () {
    for (var i = 1; i <= number_of_banners; i++) {
        var selector = "#link_" + i;
        $(selector).bind('click', i, function (e) {
            alert(e.data);
        });
    }
});

jquery 1.7以降を使用している場合は、バインドの代わりにonを使用してください

于 2012-09-18T05:34:35.457 に答える