2

これは、div rip_tab にクラス 'rip_tab_ripped' が含まれている場合にのみ発生するアニメーションで、div をクリックした後に適用されます。ただし、アニメーションは rip_tab_ripped クラスが切り替えられる前でも起動しています。各関数は、if 句がなくても個別に機能します。助けていただければ幸いです--

var sauceSquirt = {
    init: function() {

        $("#rip_tab").click(function() {
            $(this).toggleClass("rip_tab_ripped");
        });



        function fireA() {
            $("#sauceRed").switchClass("sauce_hide", "sauceRedGo", 500)
        }

        function fireB() {
            $("#sauceBlue").switchClass("sauce_hide", "sauceBlueGo", 500)
        }

        if ($('#rip_tab').hasClass("rip_tab_ripped")) {


            $('#packet').click(function() {

                var events = [fireA, fireB];

                //declare counter
                if (!this.counter) {
                    this.counter = 0;
                }

                events[this.counter]();
                this.counter = (this.counter + 1) % 3;
            });



        }

    }

}

$(document).ready(function() {
    sauceSquirt.init();

});​
4

4 に答える 4

8

この部分に問題があるようです:

if ($('#rip_tab').hasClass("rip_tab_ripped")) {
    $('#packet').click(function() {

       var events = [fireA, fireB];

       //declare counter
       if(!this.counter) { this.counter = 0; }

       events[this.counter]();
       this.counter = (this.counter + 1) % 3;
    });
}

次のように変更できますか。

$('#packet').click(function() {
    if ($('#rip_tab').hasClass("rip_tab_ripped")) {

           var events = [fireA, fireB];

           //declare counter
           if(!this.counter) { this.counter = 0; }

           events[this.counter]();
           this.counter = (this.counter + 1) % 3;
    }
    return false;
});

jQuery Promiseも参照してください。

于 2012-07-26T01:12:48.760 に答える
0

#パケット って何?私の意見では、このステートメントは次のように書く必要があります。

this.counter = this.counter % 2;
于 2012-07-26T01:02:06.007 に答える
0

解決策は、if ($ ステートメントを click ステートメントの下の行に移動することです。

于 2012-07-26T00:50:59.260 に答える
0

#packetがクリックされるまでクラスチェックを遅らせたい場合は、このメソッドのすべてが初期化時に呼び出されることに注意してください。

$('#packet').click(function() {
    if ( $('#rip_tab').is('.rip_tab_ripped') ) {
        var events = [fireA, fireB];

        //declare counter
        this.counter = this.counter || 0; // set to 0 if value is null

        events[this.counter]();
        this.counter = ++this.counter % 2; // You only have two methods
    }
});
于 2012-07-26T01:19:01.943 に答える