Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to bring focus to a window in jquery?

I am trying to bring focus to window using jquery. The window is popup initiated through a button click on the parent page. I have some ajax calls going on in the child window, so data is being updated. My issue is that if the user clicks on the parent window and hides the child behind it, i would like to bring that child window back to the forefront if there is a data update.

inside $(document).ready I wire up these events:

  $(window).blur(function(){
    WindowHasFocus =false;
}).focus(function(){
    WindowHasFocus =true;
});

Then, if data is updated, I call this function:

function FocusInput(){

 if(!WindowHasFocus){
    $(window).focus();
 }
}

This works as expected in IE8, but in FireFox(and all other browsers) the Blur event nevers seem to fire if I click the parent window. Any suggestions/ideas on how achieve this?

update:

Total facepalm moment: In FireFox: * Tools * Options… * Content tab * Advanced button next to “Enable JavaScript” * check the box named "Raise or Lower Windows"

like image 717
Mike_G Avatar asked Mar 25 '09 21:03

Mike_G


People also ask

How can input focus in jQuery?

Using jQuery With jQuery, you can use the . focus() method to trigger the “focus” JavaScript event on an element. This method is a shortcut for . trigger("focus") method.

Is Focus () deprecated?

focus() method may not fail directly, as the method still exists. However, the expected behavior will not occur. This method is deprecated.

What is window focus ()?

focus() Makes a request to bring the window to the front. It may fail due to user settings and the window isn't guaranteed to be frontmost before this method returns.

What can I use instead of focus in jQuery?

To run an element's focus event handlers without setting focus to the element, use . triggerHandler( "focus" ) instead of . focus() .


4 Answers

Total facepalm moment: In FireFox:

  • Tools
  • Options…
  • Content tab
  • Advanced button next to “Enable JavaScript”
  • check the box named "Raise or Lower Windows"

This is turned off by default and must be enabled. And also, i assumed that since it didnt work in Chrome, that Safari would be the same, but you know what they say about "assuming" (it works in Safari, but not Chrome).

like image 149
Mike_G Avatar answered Sep 22 '22 09:09

Mike_G


If there is not a strong reason for having two separate windows then it would be better use "modal boxes", there are plenty of examples out there and jquery plugins to achieve that. An example of such a plugin: http://www.84bytes.com/2008/06/02/jquery-modal-dialog-boxes/

like image 22
Miquel Avatar answered Sep 23 '22 09:09

Miquel


You're absolutely correct. In FF, it seems as though it does fire the event, but at that same time, it seems like it doesn't register the element as being focused. Therefore the blur event can never be fired. Not sure I'm even explaining that correctly... The following code says it all.

In this example, the box is hidden by default, but is displayed via the focus event listener. In IE 8, if you click the main window, it still fires blur, but in FF it doesn't:

<html>
<head>

</head>
<body>
    <div id="hiddenWin" style="width: 100px; height: 100px; background-color: Black; display: none;"></div>

    <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
    <script type="text/javascript">
        var something = 12;
        something += 4; 

        $(document).ready(function()        
            {

                $("#hiddenWin").focus(function()
                    {
                        $(this).show();
                    }
                ).blur(function()
                    {
                        $(this).hide();
                    }               
                )               

                $("#hiddenWin").focus();
            }
        );
    </script>

</body>
</html>

For your need, would it be feasible to setup an overlay background? Something that is a fixed position @ top:0 and left:0 which takes up the whole screen and has a z-index that is less than your popup. That way, when they click the overlay, it will steal focus and then you can hide everything...? IDK, just a suggestion. I'll keep messing around and see if I can figure it out. Good question. +1

like image 24
regex Avatar answered Sep 25 '22 09:09

regex


It seems like you shouldn't care to know when your window got blurred. When your data updates, your window is either not in focus, in which case you want to focus it, or it is already in focus, and focusing it again doesn't hurt you any.

like image 38
levik Avatar answered Sep 22 '22 09:09

levik