1

開閉ナビゲーションの作業中に問題が発生しました。ボタンを非表示にして、クリックすると最初に新しいクラスが追加されます。元のものを削除するよりも。それよりも、開くをクリックすると逆になります。問題は、開いているセクションでクリック イベントを実行しようとすると、何も起こらないということですか?

例:

 <div class="hideNshow">
   <span><a href="#" onclick="return false">Hide</a></span>
 </div><!-- .hideNshow -->

.hideNshowがクリックされると、新しいクラスになります。.openNav問題は、ready ステートメントでクリック イベントを使用して、クリック.openNavが実行されないかどうかを確認することです。

ここで何が間違っているのかわかりません:

考えや提案をいただければ幸いです。

デビッド

編集

Jクエリは次のとおりです。

$(document).ready(function () {
    var active = 0;
    var lastheight, lastMargin, lastmargintop;

    $(".open").click(function() {
        alert("working");
            $("#mainHead").css('height', lastheight);   
            $(".openNav").html("Hide");
            $(".openNav").css('margin-top', lastMargin);    
            $(".about").css('margin-top',lastmargintop);
            $(".openNav").addClass("hideNshow");
            $(".hideNshow").removeClass("openNav");
    });
    $(".hideNshow").click(function() {
            lastheight = $("#mainHead").height();
            lastMargin = $(".hideNshow").css('margin-top'); 
            lastmargintop = $(".about").css('margin-top');  
            $("#mainHead").css('height', '35px');   
            $(".hideNshow").html("Open");
            $(".hideNshow").css('margin-top', '-30px'); 
            $(".about").css('margin-top','45px');
            $(".hideNshow").addClass("openNav");
            $(".openNav").removeClass("hideNshow");
    });
});
4

1 に答える 1

4

これは、通常のイベント ハンドラーを使用すると、登録コードの実行時にセレクターを満たす要素のみに追加されるためです。この場合、ページが読み込まれると、div にhideShowクラスのみが含まれている可能性があるため、そのハンドラーのみが追加されます。 .

セレクターを遅延評価する場合は、イベント削除を使用します

イベント委任を使用する必要があります

//use document or any other immediate parent of the div
$(document).on('click', '.hideNshow', function(){
    //handle hide
})
//use document or any other immediate parent of the div
$(document).on('click', '.openNav ', function(){
    //handle show
})
于 2013-09-25T13:10:36.097 に答える