0

私はここに来たばかりで、何か答えが得られるかどうかを探していました。

最初の if ステートメントでは変数が機能するのに、クリック関数では機能しないのはなぜですか?

var Page = $.cookie('Page')

$(function () {

    if (Page == '0') $('.mainmenu #active').addClass('disable');

    $('.pageback').click(function () {
        if (Page == '1') $('.mainmenu #active').addClass('disable');
    }); // disable menu navigation  

    $('.pagenext').click(function () {
        if (Page == '0') $('.mainmenu #active').removeClass('disable');
    }); // disable menu navigation
});
4

1 に答える 1

0

Page変数は Cookie から 1 回割り当てられます。

var Page = $.cookie('Page')

ただし、変更されることはないため、Cookie が変更されてページが更新されるまで、値は同じままです。つまり、Page変数への代入は評価時にのみ発生します。これはvar Page = 'x'、x が特定の時点での Cookie の値であると言うことと同じです。


Cookieが更新されてもクラスは更新されませんが (Cookie を設定してからクリックを行う必要があります)、変数の代わりに評価を延期するために使用できる関数を使用することを検討してください。その他の変更点にも注意してください。

$(function () {

    function pageNo () {
       return parseInt($.cookie('Page'), 10) || 0;
    }

    var menu = $('.mainmenu #active');

    if (pageNo() == 0) menu.addClass('disable');

    $('.pageback').click(function () {
        if (pageNo() == 1) menu.addClass('disable');
    }); // disable menu navigation  

    $('.pagenext').click(function () {
        if (pageNo() == 0) menu.removeClass('disable');
    }); // disable menu navigation
});

Cookie が変更されたときにクラスが確実に変更されるようにするには、更新をトリガーする jQuery イベントが役立つ場合があります (Cookie プラグインはデフォルトでサポートしていますか?)。私は KnockoutJS を使用していますが、この種の依存関係の管理が簡単になることがわかりました。

于 2013-04-28T22:21:08.590 に答える