Reputation: 855
I have following code to invoke my newsletter modal:
$(window).load(function(){
if (sessionStorage.getItem("is_seen") === null) {
setTimeout(function(){
$('#newsletter_modal').modal('show');
sessionStorage.setItem('is_seen', 1);
}, 10000);
}
});
I use setTimeout
to invoke it after 10 seconds user visited site, but if he for example opens login modal, after 10 seconds he will see newsletter
modal and I don't want such behavior.
So far I triend checking if login
modal is open like this:
$(window).load(function(){
if($('#userModal').is(':visible')) {
if (sessionStorage.getItem('is_seen') === null) {
setTimeout(function(){
$('#newsletter_modal').modal('show');
sessionStorage.setItem('is_seen', 1);
}, 10000);
}
}
});
Bit it didn't work. Also I tried to check if #loginModal
has class in
and it didn't work too. What am I doing wrong in this case?
Upvotes: 1
Views: 1137
Reputation: 14712
declare global variable , then affect the setTimoutOut to it
if the user try to login just clear that timeout by using clearTimeout js dunction
it should be like : var timeOut;
$(window).load(function(){
if (sessionStorage.getItem("is_seen") === null) {
timeOut = setTimeout(function(){
$('#newsletter_modal').modal('show');
sessionStorage.setItem('is_seen', 1);
}, 10000);
}
});
when click to show modal login do
clearTimeout(timeOut)
please see below snippet
var timeout;
$(window).load(function(){
timeout = setTimeout(function(){
$('#newsletter_modal').modal('show');
}, 5000);
$("#login").click(function(e){
clearTimeout(timeout);
})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div class="container">
<!-- Trigger the modal with a button -->
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" id="login" data-target="#myModal">login</button>
<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">login</h4>
</div>
<div class="modal-body">
<p>Login modal</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="newsletter_modal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">newsletter</h4>
</div>
<div class="modal-body">
<p>Some text in news letter.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
Otherwise if you still want to check with css , just check if the login modal has in
classe .
see bewlo snippet
var timeout;
$(window).load(function(){
setTimeout(function(){
if(!$("#loginModal").hasClass('in'))
$('#newsletter_modal').modal('show');
}, 5000);
/*
$("#login").click(function(e){
clearTimeout(timeout);
})*/
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div class="container">
<!-- Trigger the modal with a button -->
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" id="login" data-target="#loginModal">login</button>
<!-- Modal -->
<div class="modal fade" id="loginModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">login</h4>
</div>
<div class="modal-body">
<p>Login modal</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="newsletter_modal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">newsletter</h4>
</div>
<div class="modal-body">
<p>Some text in news letter.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
Upvotes: 1
Reputation: 2595
Simplest way, check if modal has class "open" or "opended", I'm not sure which class is added for displayed modal:
if ( jQuery('.my_login_modal').hasClass('open') ) {
//remove setTimeout or even remove modal by .hide() to be sure
clearTimeout(timeOut);
}
and put this in interval
Upvotes: 1
Reputation: 51
You should check the display-style from the modal instead.
$(window).load(function(){
// if($('#userModal').is(':visible')) {
if($('#userModal').css('display') == 'block') {
if (sessionStorage.getItem('is_seen') === null) {
setTimeout(function(){
$('#newsletter_modal').modal('show');
sessionStorage.setItem('is_seen', 1);
}, 10000);
}
}
});
Upvotes: 1