2016-03-22 13 views
2

探している正確なシナリオが見つかりませんでした。 閉じるボタンの代わりに、親divからクラスを切り替えることを試みています。ちょうどあなたに明確な考えを与えるために、私はコード全体を投稿しています。親の中から何かをクリックしたときに親からクラスを削除する

$('.team__list li').on('click', function() { 
     $('.team__list li').removeClass('active'); 
     $(this).addClass('active'); 
     console.log('hi'); 
    }); 

    $('.team__list li .close-button').click(function(event) { 
     $(this).closest('.team__list li').removeClass('active'); 
     event.stopPropagation(); 
    }); 

    $('.active *').on('click',function(event) { 
     console.log('hi'); 
     $(this).closest('.team__list li').removeClass('active'); 
     event.stopPropagation(); 
    }); 

最初のブロック要素がクリックされたアクティブなクラスをトリガし、兄弟から削除は、第二は、正しくボタンを閉じる時にクラスを削除します。しかし、私は3つ目のブロックを一斉に発射することはできません。

クラスアクティブを受け取ると、子要素(子要素を持つ)がアクティブ要素の上に絶対配置されることに注意してください(重要であるかどうかはわかりません)。

編集:

$('.team__list li').not('.active').on('click', function(event) { 
     $('.team__list li').removeClass('active'); 
     $(this).addClass('active'); 
     console.log('open'); 
     event.stopPropagation(); 
    }); 



    $('.team__list li .close-button').click(function(event) { 
     $(this).closest('.team__list li').removeClass('active'); 
     event.stopPropagation(); 
    }); 

    $(".team__list").on('click', ".active *", function(event) { 
     console.log('close'); 
     $(this).closest('.team__list li').removeClass('active'); 
     event.stopPropagation(); 
    }); 

答えて

1

あなたは実行時にclassの追加と削除されているので、あなたがあなたのイベントをバインドするためにevent-delegationを使用する必要があります。ページのロード中に登録されたイベントは、実行時にそのイベントに適格とされるエレメントには適用されないためです。

$(".team__list").on('click', ".active *", function(event) { 
    //your code goes here. 
+0

これは役に立ちます。しかし、イベントは発生しますが、コード全体がまだ必要に応じてトグルしません。私は現在のコードを反映した質問を編集しました。 – Leoland

+0

@レゴランド私はあなたが言っていることを理解できません。もう少し説明できますか? –

+0

もちろん。 チームメンバーのグリッドがあります。そのうちの1つをクリックすると、彼らは「アクティブ」になり、その子供たち(そのメンバーに関する完全な情報を持つモーダル)が表示され、チームメンバーの上に絶対的に配置されます。 問題は、開かれたクリックで伝播を停止しなければならないようです。自動的に閉じます。しかし、私はそれを停止します。私は決断スクリプトを発射することはできません。 – Leoland

関連する問題