Reputation: 178
I used this code, to create a basic modal : https://codepen.io/paallaire/project/editor/ZBajYk/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<link rel="stylesheet" href="main.css">
</head>
<body>
<div class="c-modal-request js-modal-request-close">
<div class="c-modal-request__content">
<a href="#" class="c-modal-request__btn-close js-modal-request-close">Close ME</a>
<h1>HTML Ipsum Presents</h1>
<p><strong>Pellentesque habitant morbi tristique</strong> senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em> Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, <code>commodo vitae</code>, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci,
sagittis tempus lacus enim ac dui. <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="main.js"></script>
</body>
</html>
Goal : If I click in the "red" area or I click on the button "Close me"
Result = the modal closes ( for this example I used jquery.hide() )
But I try to understand why when I click in the white area (modal) the modal close.
Upvotes: 1
Views: 4160
Reputation: 24001
The problem is : Your div modal has js-modal-request-close
class which is the same class of close me
.. For this the div close when clicking inside
To solve that .. you will need to
1
<div class="c-modal-request js-modal-request-close">
it should be
<div class="c-modal-request">
2
e.stopPropagation();
Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.
And you can use it like this
$(document).ready(function() {
console.log("test");
console.log($);
$(".js-modal-request-close , .c-modal-request").on("click", function(e) {
e.preventDefault();
$(".c-modal-request").hide();
});
$(".c-modal-request__content").on('click' , function(e){
e.stopPropagation();
});
});
.c-modal-request {
position: fixed;
top: 0;
left: 0;
z-index: 300;
width: 100%;
height: 100%;
background-color: red;
}
.c-modal-request__content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 60px;
max-width: 720px;
width: 100%;
overflow-y: auto;
background-color: #fff;
position: relative;
z-index: 400;
}
.c-modal-request__btn-close {
color: #000;
background-color: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="c-modal-request">
<div class="c-modal-request__content">
<a href="#" class="c-modal-request__btn-close js-modal-request-close">Close ME</a>
<h1>HTML Ipsum Presents</h1>
<p><strong>Pellentesque habitant morbi tristique</strong> senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em> Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, <code>commodo vitae</code>, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci,
sagittis tempus lacus enim ac dui. <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>
</div>
</div>
Additional : About closing div while click outside you need to look at Use jQuery to hide a DIV when the user clicks outside of it
Upvotes: 1
Reputation: 309
You have to check if the element you clicked is really .js-modal-request-close
or a descendant:
$(".js-modal-request-close").on("click", function(e) {
if (e.target !== this)
return;
$(".c-modal-request").hide();
});
Upvotes: 0