0

:not()クラス「collapseLinks」で指定されたアンカー要素のみをターゲットとするアコーディオンがあり、セレクターでクラス「vanilla」を除外しようとしています。クラス「バニラ」は、私が普通に振る舞いたいアンカーにすぎません。現在、「バニラ」アンカーをクリックすると、アコーディオンも発射されます。どんな助けでも素晴らしいでしょう!

$('a.collapseLinks').click(function() {
    $("div.slider > a.collapseLinks").click(function() {
        $(this).children(".slider > a.collapseLinks").toggle();
    });

    $(this).toggleClass('collapseLinksClicked');
});

// Stuff to do as soon as the DOM is ready;
$(".internal").hide();

$("input").attr("disabled", "disabled");

$(".slider:not(.vanilla)").click(function() {
    $(this).next(".internal:not(.vanilla)").slideToggle();
}).toggle(function() {
    $(this).children("span").text("-");
}, function() {
    $(this).children("span").text("+");
});
4

2 に答える 2

0

最初の「クリック」ハンドラーは、クリックされるたびに新しいイベントハンドラーを追加します。これらは、以前のハンドラーを上書きしません。何をしようとしているのかを慎重に考え、その方法をクリーンアップします。あなたの説明に基づいて、ここに提案があります:

$('a.collapseLinks').click(function() {
    $(this).next("div.slider").toggle();
    $(this).toggleClass('collapseLinksClicked');
});

1.6以降のjQueryのすべてのバージョンで、入力要素を無効にする正しい方法は次のとおりです。

$("input").prop("disabled", true);

そして最後に、2番目の「クリック」ハンドラーは「スライダー」要素(すべて要素であると想定)を見つけ<div>て、「バニラ」要素(すべての要素であると想定)をフィルターで除外しようとしています<a>.toggleまた、 2つの関数を引数として取る署名はありません。

$("div.slider").click(function() {
    $(this)
        .next("div.internal")
        .slideToggle().end()
        .toggle(function() {
            if ( $(this).is(':visible') ) {
                $(this).children("span").text("-");
            }
            else {
                $(this).children("span").text("+");
            }
        });
});
于 2012-12-14T15:54:58.560 に答える
-1

伝播したくないハンドラーでstopPropagationを使用する必要があります:http://api.jquery.com/event.stopPropagation/

$("a.vanila").click(function(event){
  event.stopPropagation();
  // do something
});  

乾杯。

于 2012-12-14T15:15:06.363 に答える