2017-10-07 21 views
0

シンプルなような問題がありますが、何が起こっているのかわかりません。 onClickというポップアップがあり、メニュー内のポップアップボックスが表示されています。私はポップアップと呼ばれる私のページ上の要素を持っていて、それはpopupActiveクラスを追加してクリックして画面を満たし、load()を使用するよりも、サーバーからいくらかのコンテンツを読み込みます。これまでのところ素晴らしい作品です。その後、ユーザーがXをクリックすると、popupActiveクラスが削除され、元の状態に戻ります(これはscale(0)scale(1)で実行されます)。しかし、代わりにXをクリックすると、コンソールにエラーが表示されず、console.log("Hello!")を試してみましたが、そこにスクリプトがあるかどうか試しましたが、何も表示されません。ポップアップ内の閉じるボタンのアンサー処理(クリックイベントのjQuery)

私のコードは以下の通りです。

HTML

<section id="popup" class="popup"><button class="about-close">X</button</section> 

CSS

.popup { 
    position: fixed; 
    top: 0px; 
    left: 0px; 
    width: 100vw; 
    min-height: 100vh; 
    border-radius: 50px; 
    z-index: 0; 
    transform: scale(0); 
    transition: 1s linear all; 
} 
.popupActive { 
    transform: scale(1); 
    z-index: 99; 
    transition: 1s linear all; 
} 
.about-close { 
    position: fixed; 
    top: 30px; 
    right: 30px; 
    width: 50px; 
    height: 50px; 
    background: transparent; 
    display: block; 
    border-radius: 50%; 
    border: 1px solid #f74d4e; 
    color: #f74d4e; 
    font-size: 30px; 
    cursor: pointer; 
    z-index: 999; 
} 

はJavaScript

$(".li-a").on('click',function(event) { 
    event.preventDefault(); 
    $("#popup").addClass("popupActive").load("Ajax/about.html"); 
}); 
$(".about-close").on('click',function(event) { 
    event.preventDefault(); 
    console.log("Hello!"); 
    $(".about-container").remove(); 
    $("#popup").removeClass("popupActive"); 
}); 
+0

だけでなくHTMLを提供してください –

+0

それが働いています。私はそれをテストしました: - https://jsfiddle.net/0kh6c9sm/ –

+0

ポップアップ要素にコンテンツを読み込むのではなく、コンテンツdivをポップアップの中に入れて読み込みを試みます。 –

答えて

1
<section id="popup" class="popup"><button class="about-close">X</button> 
    <div class="popup-content"></div> 
    </section> 

スクリプト:

$(".li-a").on('click',function(event) { 
     event.preventDefault(); 

     $("#popup").addClass("popupActive"); 
     $("#popup .popup-content").load("Ajax/about.html"); 
    }); 
    $(".about-close").on('click',function(event) { 
     event.preventDefault(); 
     console.log("Hello!"); 
     $("#popup .popup-content").remove(); 
     $("#popup").removeClass("popupActive"); 
    }); 
+0

モーダルが開くたびに新しいハンドラが追加されます。複数の開いたクローズを試して、コンソール内にいくつの "Hello"があるかを見てみましょう。あなたは多くの開閉を期待していない場合、大きな問題ではないかもしれません。 – arbuthnott

+0

そのシンプルなページ、楽しみのためだけに、多くの訪問やオープン/クローズ、静的な、単純なコンテンツ... – stelarossa

+1

@アブスノット、私は理解していません。クローズは、グローバルに一度だけバインドされます。 .li-a –

0

あなたloadメソッドは非同期です。つまり、モーダルを閉じるクリックハンドラをアタッチしようとする前に、内部HTMLの追加が完了していない可能性があります。

あなたは(.load("Ajax/about.html", function() { /* attach it here */ })のような)負荷のためのコールバックでのクリックハンドラを添付できますが、私はよりよい解決策は、一度だけでもモーダルロードする前に、最大高リスナーを添付することだと思う:

$("#popup").on('click', '.about-close',function(event) { 
    event.preventDefault(); 
    console.log("Hello!"); 
    $(".about-container").remove(); 
    $("#popup").removeClass("popupActive"); 
}); 

そのコードは、最初のページDOMが準備できたらすぐに1回実行する必要があります。

+0

この1つはうまく動作しません。それを試してみてください。ホー・トゥトゥの解決策が働いています。とにかく:)ありがとうございます。 – stelarossa

関連する問題