jQuery - Closing modal pop-up by clicking outside of it not working

Viewed 18613

I'm trying to close a pop-up when clicking outside of it.

HTML

<span class="open"data-modal="modal1">Button</span>

<div class="modal" id="modal1">

    <!--modal content-->
    <div class="modal-content">

        <!--close button-->
        <span class="close">&times;</span>

        <!--content-->

    </div>
</div>

JS

$(document).ready( function() {

    //open pop-up when span is clicked
    $(".open").on("click", function() {
        var modalId = $(this).data("modal");
        var $modal = $("#" + modalId);
        $modal.show();
    });

    //close pop-up when close button is clicked
    $(".close").on("click", function() {
        $(this).closest(".modal").hide();
    });



    $("body").click(function(){
        $(".modal").hide();
    });

    // Prevent events from getting pass .popup
    $(".modal-content").click(function(e){
       e.stopPropagation();
    });

});

At the bottom of that code block, I have a click function on the body that hides the modal, but if modal-content is clicked, then e.stopPropagation(); is fired.

However, when I click the button to open the pop-up, it doesn't open because of $("body").click(function(){}.

Is there a way I can wrap $("body").click(function(){} in something like:

if($('.modal').show == true{ ... });
3 Answers

Using bootstrap 4, you can close modal when clicking outside by just doing this.

 $('.modal').click(function (e) {
    $('.modal').modal('toggle');
 });
Related