Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DIV losing focus when clicking on elements inside it

Why does the DIV lose focus when i click on elements inside it? I have an JS that hides the DIV when it loses focus. But that should not happen when clicking on elements inside the DIV. It needs to be done with .on because there is some ajax loading going on.

$(document).on('focusout', '#geomodal', function(e) {
    console.log('.focusout');
});
<div id="geomodal" tabindex="-1">
    <input value="109" name="districts[]" type="checkbox">
    <label>Bla</label>
    <br>
    <input value="152673" name="districts[]" type="checkbox">
    <label>Blabla</label>
    <br>
</div>

http://jsfiddle.net/2g41su81/2/

jQuery Documentation:

The focusout event is sent to an element when it, or any element inside of it, loses focus.

like image 943
Mike Avatar asked Oct 14 '25 03:10

Mike


2 Answers

Only one element has focus at a time - if an input has focus, your div doesn't. After losing focus, check if the newly-focused element is your div or a child, and don't hide it in that case.

$(document).on('focusout', '#geomodal', function (e) {
    setTimeout(function(){
        var focus=$(document.activeElement);
        if (focus.is("#geomodal") || $('#geomodal').has(focus).length) {
            console.log("still focused");
        } else {
            console.log(".focusout");
        }
    },0);
});

The setTimeout is necessary to allow the new element to gain focus before doing the check.

http://jsfiddle.net/2g41su81/5/

like image 110
CupawnTae Avatar answered Oct 16 '25 17:10

CupawnTae


you can also use e.relatedTarget to get the element which caused the focusout to be triggered and do handling according to that!

like image 26
packetZ Avatar answered Oct 16 '25 15:10

packetZ



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!