0

クリック可能なプロパティを持つ4つのボタンがあります。ボタンをクリックするとdivが下にスライドし、同じdivをもう一度クリックするとdivが閉じます。divを開いているときに、残りの3つのボタンのクリックプロパティを無効にする必要があるなどの条件を追加したいのですが、

for (var i = 1; i <= 4; i++) {
    $(".slide" + i).click(function () {
        var openTab = $(this).attr('class');
        openTab = openTab.replace('slide', '');
        var facetGroup = $(this).attr("key");
        if ($('#panel').is(':visible')) {
            buttonCloser(openTab);
        } else {
            buttonOpener(openTab, facetGroup);
        }
    });
}

function buttonCloser(m) {
    for (var j = 1; j <= 4; j++) {
        if (j != m) {
            //alert(j);
            $(".slide" + j).bind("click");
        } else {
            $(".slide" + j).css({
                "background-color": " #fff5c3",
                "color": "#000000"
            });
        }
    }
    $("#panel").slideUp("slow");
}

function buttonOpener(m, n) {
    for (j = 1; j <= 4; j++) {
        if (j != m) {
            $(".slide" + j).unbind("click");
        } else {
            $(".slide" + j).css({
                "background-color": "#293345",
                "color": "#fff5c3"
            });
        }
    }
    $("#panel").slideDown("slow");
    refreshFacet(n);
}

このコードの問題は、スライダーをクリックしてdivを初めて開くと、他の3つのクリックイベントが無効になることです。そのdivを閉じると、クリックプロパティが再度有効になりません。だから何も開かない。

4

1 に答える 1

0

実際のマークアップを確認せずに、「プレーンな」JavaScriptとjQueryを組み合わせて照合するのではなく、単純なjQueryを使用することをお勧めします。

var buttons = $('button[class^="slide"]'),
    panel = $('#panel');

$(buttons).click(
    function() {
        var that = $(this);
        if (panel.is(':visible')) {
            if (that.hasClass('opener')) {
                panel.slideToggle();
                that.removeClass('opener');
            }
            else {
                return false;
            }
        }
        else {
            panel.slideToggle();
            that.addClass('opener');
        }
    });​

JSフィドルデモ


参照:

于 2012-05-16T14:30:32.010 に答える