1

タイトルが十分に明確でない場合は申し訳ありませんが、<a>ユーザーがそれぞれをクリックすると同じクラスの要素があり、jquery コードはそれぞれ 1 つずつ実行する必要があります。問題は、最初の要素をクリックしたときと、コード全体の実行が終了する前です。 2番目の要素をクリックすると、最初の要素が不完全なままになり、2番目の要素でコードが実行されます。同時に動作するはずです(ところで、データをphpファイルに送信するはずであり、クラスによって多くの要素をクリックしても正常に動作しません働く)

コードは次のとおりです。

    jQuery(function($) {
        $('.anchor-tag-class').each(function() {
            $(this).click(function() {
                $this = $(this);
                var id = $this.attr('data-id');
                if ( $this.hasClass('on') ) {
                    $this.removeClass('on');
                    $this.addClass('loading');
                    $.post("process.php", { element_id: id, status: 'off' }, function(data) { $this.addClass('off').removeClass('loading'); } );
                } else {
                    $this.removeClass('off');
                    $this.addClass('loading');
                    $.post("process.php", { element_id: id, status: 'on' }, function(data) { $this.addClass('on').removeClass('loading'); } );
                }
            });
        });
    });

だから私は間違っているのですか?

事前に感謝します。

4

2 に答える 2

2

each()この場合、コードはイベントを発生させた特定の要素に対してのみ実行されるため、は必要ありません。$this変数にぶら下がっている関数をチェーンすることもできます。

これを試して:

$('.anchor-tag-class').click(function() {
    var $this = $(this);
    var id = $this.attr('data-id');
    if ( $this.hasClass('on') ) {
        $this.removeClass('on').addClass('loading');
        $.post("process.php", { element_id: id, status: 'off' }, function(data) { $this.addClass('off').removeClass('loading'); } );
    } 
    else {
        $this.removeClass('off').addClass('loading');
        $.post("process.php", { element_id: id, status: 'on' }, function(data) { $this.addClass('on').removeClass('loading'); } );
    }
});
于 2012-05-29T10:12:20.790 に答える
1

$(this) に設定された $this 変数があります... $this はどこで定義されていますか? それが関数の範囲外にある場合、それはあなたの問題です!

于 2012-05-29T10:13:46.800 に答える