2016-03-25 11 views
1

複数のライトボックスを含むページを作成しています。ライトボックス用のボタンはこれです:jQueryの動的選択は、最初のトリガーの後に機能しなくなります。

<button class="lightbox" data-lb="result-slide1">See More Results</button> 

ライトボックスは、次のようにトリガーされます。

var lightboxButtons = $('.lightbox'); 

lightboxButtons.on('click', function(e) { 
    e.preventDefault(); 
    var button = $(this); 
    var lightboxData = button.attr("data-lb"); 
    overlay.fadeIn(); 
    lightboxDisplay(lightboxData); 
}); 

そしてライトボックスが次のように表示されます。

function lightboxDisplay(content) { 
    var lightboxHTML = $('#' + content); 
    lightboxContent.html(lightboxHTML); 
    lightboxContainer.fadeIn(); 
}; 

だから、基本的にスクリプトを取得しますボタンのdata-lb属性に一致するidの要素を探し、その要素のhtmlをライトボックスに入れます。

  1. ライトボックスボタンAが

再びトリガされ

  • ライトボックスボタンBが
  • ライトボックスボタンAをトリガされ
  • トリガーされます。

    問題は、これらのステップが起こる場合、これは動作を停止していることですこの場合、ライトボックスは表示されますが、ライトボックスには内容はありません。私がconsole.log(lightboxHTML)の場合、それらの手順に従うと空のオブジェクトが表示されるので、問題は何とかその変数と何か関係があります。探してくれてありがとう。

    編集:ここでは閉じるボタンがクリックされたときに実行される機能は次のとおりです。

    function lightboxReset() { 
        overlay.fadeOut(); 
        lightboxContainer.fadeOut(); 
    }; 
    

    EDIT2:ここではjQueryの選択からライトボックスに入るかもしれないもののいくつかのHTMLです:

    <article class="slide-content results-lb-container" id="result-slide1"> 
        <img src="img/profile-placeholder.png" alt=""> 
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent at eleifend orci. Aliquam ac bibendum erat. Sed dapibus placerat feugiat. Nam et risus a purus scelerisque dignissim at ac purus. Donec dapibus nulla et lectus fringilla elementum. Vivamus orci ipsum, tincidunt id nisl posuere, rutrum imperdiet nibh. Fusce vitae dignissim libero. Nulla vel sapien urna. Fusce et mauris et neque imperdiet suscipit. In pretium elit felis, in consequat nulla ornare et. Etiam finibus nibh lorem, vitae placerat magna commodo ut.</p> 
    </article> 
    
    +0

    'console.log(content)'とは何ですか? – Barmar

    +0

    これは、クリックされたボタンの 'data-lb'属性文字列が何であったかを示します。 –

    +0

    ライトボックスを閉じるとどうなりますか?私の推測では、問題はそこにあるということです:あなたの例では、実際にHTMLを追加するのではなく、ライトボックスにjQueryオブジェクトを追加します。ライトボックスを閉じるときに何らかの形で編集した場合(たとえば、削除するか空にするなど)、その理由が考えられます。 – mmgross

    答えて

    1

    これを試してください:

    function lightboxDisplay(content) { 
        var lightboxHTML = $('#' + content); 
        lightboxContent.html(lightboxHTML.html()); 
        lightboxContainer.fadeIn(); 
    }; 
    
    +0

    なぜ違いがありますか? 'lightboxHTML'が空のjQueryコレクションである場合、' .html() 'を呼び出すと便利なものが返されるのはなぜですか? – Barmar

    +0

    これが問題であれば、なぜ初めて動作するのですが、2回目では動作しませんか? – Barmar

    +0

    これは実際に問題を解決します。 @ mmgrossも提案したのと同じ解決策です。私が彼に返答したときに、問題は解決しましたが、残念ながらライトボックスのHTMLから必要なすべてのスタイルを削除します。 –

    関連する問題