How to get div onblur event to execute a javascript function?

后端 未结 5 838
说谎
说谎 2020-12-14 03:29

Hi I have a div that contains three textboxes , i need a function to be called once the control is out of the div tag, I don\'t want to use the onclick event because the foc

相关标签:
5条回答
  • 2020-12-14 03:51

    I've used the following jQuery script in a similar scenario with 3 textboxes inside a div:

    <script type="text/javascript">
        $(document).ready(function () {
            $("jQuerySelectorToGetYourDiv").focusout(function (e) {
                if ($(this).find(e.relatedTarget).length == 0) {
                    // Focus is now outside of your div. Do something here.
                    // e.Target will give you the last element within the
                    // div to lose focus if you need it for processing.
                }
            });
        });
    </script>
    
    0 讨论(0)
  • 2020-12-14 03:56

    You can bind the onblur event handler to each of the input elements and check in the handler if any of them have focus (using document.activeElement).

    <script type="text/javascript">
        function checkBlur() {
            setTimeout(function () {
                if (document.activeElement != document.getElementById("input1") &&
                    document.activeElement != document.getElementById("input2") &&
                    document.activeElement != document.getElementById("input3")) {
                    alert("I am called");
                }
            }, 10);
        }
    </script>
    <!-- ... -->
    <div>
        <input type="text" id="input1" value="Inside DIV 1" onblur="checkBlur()" />
        <input type="text" id="input2" value="Inside DIV 2" onblur="checkBlur()" />
        <input type="text" id="input3" value="Inside DIV 3" onblur="checkBlur()" />
    </div>
    <input type="text" value="Outside DIV" />
    

    Or, instead, using jQuery could simplify the process (especially if you have a lot of inputs):

    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#theDiv input").bind("blur", function () {
                setTimeout(function () {
                    var isOut = true;
                    $("#theDiv input").each(function () {
                        if (this == document.activeElement) isOut = false;
                    });
                    if (isOut) {
                        // YOUR CODE HERE
                        alert("I am called");
                    }
                }, 10);
            });
        });
    </script>
    <!-- ... -->
    <div id="theDiv">
        <input type="text" value="Inside DIV 1" />
        <input type="text" value="Inside DIV 2" />
        <input type="text" value="Inside DIV 3" />
    </div>
    <input type="text" value="Outside DIV" />
    

    EDIT: I wrapped the event handlers inside a setTimeout to make sure that the other element had time to focus.

    0 讨论(0)
  • 2020-12-14 03:56

    Perhaps an "onChange" event would better serve your needs. I can't think of a situation where the DIV would be clicked, and not the input fields.

    0 讨论(0)
  • 2020-12-14 03:57

    You'll need to add tabindex=0 to the div in order for it to gain focus. So something like

    <div tabindex="-1" onblur="Callme();">
    

    should do it.

    0 讨论(0)
  • 2020-12-14 03:58
    <html>
    <head>
        <title>Div Onblur test</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
        <script type="text/javascript">
            function Callme() {
                alert("I am Called");
            }
    
            $(function() {
                var callme;
                $('#onblur-callme input')
                    .focus(function() {
                      callme = false;
                    })
                    .blur(function() {
                      callme = true;
                      setTimeout(function() {
                          if (callme) {
                              Callme();
                          }
                      }, 1);
                    });
            });
        </script>
    
    </head>
    <body>
        <div id="onblur-callme">
            <input type="text" value ="Inside DIV 1" />
            <input type="text" value ="Inside DIV 2" />
            <input type="text" value ="Inside DIV 3" />
        </div>
         <input type="text" value ="Outside DIV" />
    </body>
    </html>
    
    0 讨论(0)
提交回复
热议问题