I know lot of questions something like this are also in Stackoverflow. Here is a bit of Jquery problem. I have added toggle class Jquery function, and the same class should be remove when click anywhere on the body. Its working now, but I no need toggle that class when we click inside of the input text field.
Code:
var removeClass = true;
$(".btn-search").click(function() {
$(".input-search").toggleClass('expanded');
removeClass = false;
});
$("html").click(function() {
if (removeClass) {
$(".input-search").removeClass('expanded');
}
removeClass = true;
});
body {
background: #eee;
}
.col-search {
padding: 13px 8px 8px 0;
position: relative;
width: 80%;
}
.input-search {
width: 220px;
height: 34px;
max-width: 0;
padding: 5px 10px;
transition: all .2s ease;
position: absolute;
top: 13px;
bottom: 13px;
right: 46px;
border: 0;
box-sizing: border-box;
opacity: 0;
}
.input-search.expanded {
max-width: 220px;
opacity: 1;
}
.btn-search {
position: absolute;
right: 0;
width: 38px;
height: 34px;
border: 0;
background: #333;
color:#fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div class="col-search">
<input class="input-search" type="search" placeholder="Search" />
<input type="button" class="btn-search" value="click">
</div>
JS Fiddle: https://jsfiddle.net/vishnuprasadps/3a84p6h0/
To fix this you can check which element raised the click event that bubbled up the DOM. If it was not within the .col-search then you can toggle the class.
Also note that this logic makes your removeClass variable redundant.
$(".btn-search").click(function(e) {
e.stopPropagation();
$(".input-search").toggleClass('expanded');
});
$("html").click(function(e) {
if ($(e.target).closest('.col-search').length == 0)
$(".input-search").removeClass('expanded');
});
body {
background: #eee;
}
.col-search {
padding: 13px 8px 8px 0;
position: relative;
width: 80%;
}
.input-search {
width: 220px;
height: 34px;
max-width: 0;
padding: 5px 10px;
transition: all .2s ease;
position: absolute;
top: 13px;
bottom: 13px;
right: 46px;
border: 0;
box-sizing: border-box;
opacity: 0;
}
.input-search.expanded {
max-width: 220px;
opacity: 1;
}
.btn-search {
position: absolute;
right: 0;
width: 38px;
height: 34px;
border: 0;
background: #333;
color: #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div class="col-search">
<input class="input-search" type="search" placeholder="Search" />
<input type="button" class="btn-search" value="click">
</div>
Make sure to check the event wasn't triggered by the input you want to exclude using event.target
This also doesn't interfere with other events that might be bound to the input itself.
var removeClass = true;
$(".btn-search").click(function() {
$(".input-search").toggleClass('expanded');
removeClass = false;
});
$("html").click(function() {
var searchInput = $(".input-search");
if (removeClass && event.target != searchInput[0]) {
searchInput.removeClass('expanded');
}
removeClass = true;
});
body {
background: #eee;
}
.col-search {
padding: 13px 8px 8px 0;
position: relative;
width: 80%;
}
.input-search {
width: 220px;
height: 34px;
max-width: 0;
padding: 5px 10px;
transition: all .2s ease;
position: absolute;
top: 13px;
bottom: 13px;
right: 46px;
border: 0;
box-sizing: border-box;
opacity: 0;
}
.input-search.expanded {
max-width: 220px;
opacity: 1;
}
.btn-search {
position: absolute;
right: 0;
width: 38px;
height: 34px;
border: 0;
background: #333;
color:#fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div class="col-search">
<input class="input-search" type="search" placeholder="Search" />
<input type="button" class="btn-search" value="click">
</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With