1

わかりましたので、いくつかのレイアウト セクションを非表示にするのに苦労しています (レイアウト ページの div と mvc3 を使用しています)。

基本的にメインロジックであるこのjsフラグメントがあります:

$('.contentExpand').bind('click', function () {
            $.cookie('right_container_visible', "false");
        });

        //Cookies Functions========================================================
        //Cookie for showing the right container
        if ($.cookie('right_container_visible') === 'false') {
            if ($('#RightContainer:visible')) {
                $('#RightContainer').hide();
            }
            $.cookie('right_container_visible', null);
        } else {
            if ($('#RightContainer:hidden')) {
                $('#RightContainer').show();
            }
        }

ご覧のとおり、特定の css を持つリンクをクリックするたびにコンテナーを非表示にしています。これは、単純なテストではうまくいくようです。しかし、私がそれをテストし始めると

.contentExpand クリック --> 詳細ボタン クリック --> .contentExpand クリック --> [ここで予期しない問題: 行 $.cookie('right_container_visible', null); 読み取られますが、それを無視するかのように値を null に設定しません]

これを実装するための正しいロジックを理解しようとしています。どうすればこれを解決できるか知っている人はいますか?

4

2 に答える 2

0

最も簡単な解決策は、バインドのデリゲートの外側に変数を作成することです。例えば:

var rightContVisibility = $.cookie('right_container_visible');
$('.contentExpand').bind('click', function () {
             $.cookie('right_container_visible', "false");
             rightContVisibility = "false";
        });

if (rightContVisibility === 'false') {
...
}
于 2012-05-08T20:25:51.543 に答える
0

私にとって最も効果的だったのは、要素のサイズ変更をキャッチできるイベントを作成することでした。これは別の投稿から入手しましたが、どの投稿か覚えていません。とにかく、イベントのコードは次のとおりです。

//Event to catch rezising============================================================================
(function () {
var interval;
jQuery.event.special.contentchange = {
    setup: function () {
        var self = this,
        $this = $(this),
        $originalContent = $this.text();
        interval = setInterval(function () {
            if ($originalContent != $this.text()) {
                $originalContent = $this.text();
                jQuery.event.handle.call(self, { type: 'contentchange' });
            }
        }, 100);
    },
    teardown: function () {
        clearInterval(interval);
    }
};
})();
//=========================================================================================

//Function  to resize the right container============================================================
(function ($) {
$.fn.fixRightContainer = function () {

    this.each(function () {

        var width = $(this).width();
        var parentWidth = $(this).offsetParent().width();
        var percent = Math.round(100 * width / parentWidth);
        if (percent > 62) {
            $('#RightContainer').remove();
        }
    });
};
})(jQuery);
//===================================================================================================
于 2012-06-28T23:15:04.543 に答える