Как перенести фокус на окно в jquery? - PullRequest
9 голосов
/ 26 марта 2009

Я пытаюсь сосредоточиться на окне, используя jquery. Всплывающее окно открывается при нажатии кнопки на родительской странице. У меня есть несколько вызовов ajax в дочернем окне, поэтому данные обновляются. Моя проблема заключается в том, что если пользователь щелкает по родительскому окну и прячет дочернее окно за ним, я хотел бы вернуть это дочернее окно на передний план, если произойдет обновление данных.

внутри $ (документ). Я подключаю эти события:

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

Затем, если данные обновляются, я вызываю эту функцию:

function FocusInput(){

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

Это работает, как и ожидалось, в IE8, но в FireFox (и во всех других браузерах) кажется, что события Blur запускаются, если я щелкаю родительское окно. Любые предложения / идеи о том, как этого добиться?

Обновление:

Общий лицевой момент: В FireFox: * Инструменты * Опции… * Вкладка контента * Кнопка «Дополнительно» рядом с «Включить JavaScript» * установите флажок «Поднять или опустить окна»

Ответы [ 5 ]

3 голосов
/ 27 марта 2009

Общий момент лицевой стороны лица: в FireFox:

  • Инструменты
  • Опции ...
  • Вкладка содержимого
  • Кнопка «Дополнительно» рядом с «Включить JavaScript»
  • установите флажок «Поднять или опустить окна»

Это отключено по умолчанию и должно быть включено. Кроме того, я предположил, что, поскольку он не работает в Chrome, Safari будет таким же, но вы знаете, что они говорят о «предположении» (оно работает в Safari, но не в Chrome).

2 голосов
/ 26 марта 2009

Если нет веской причины иметь два отдельных окна, тогда было бы лучше использовать «модальные окна», есть множество примеров и плагинов jquery для достижения этой цели. Пример такого плагина: http://www.84bytes.com/2008/06/02/jquery-modal-dialog-boxes/

2 голосов
/ 26 марта 2009

Вы абсолютно правы. В FF кажется, что оно запускает событие, но в то же время кажется, что элемент не регистрируется как сфокусированный. Поэтому событие размытия никогда не может быть запущено. Не уверен, что я даже объясняю это правильно ... Следующий код говорит сам за себя.

В этом примере поле скрыто по умолчанию, но отображается через прослушиватель событий фокуса. В IE 8, если вы щелкнете по главному окну, оно все еще вызывает размытие, но в FF это не так:

<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>

Для ваших нужд, возможно ли установить фон наложения? То, что является фиксированной позицией @ top: 0 и left: 0, которая занимает весь экран и имеет z-индекс, который меньше вашего всплывающего окна. Таким образом, когда они щелкают по оверлею, он крадет фокус, а затем вы можете скрыть все ...? ИДК, просто предложение. Я буду продолжать возиться и посмотреть, смогу ли я понять это. Хороший вопрос. + 1

1 голос
/ 26 марта 2009

Кажется, вам не нужно знать, когда ваше окно размыто. Когда ваши данные обновляются, ваше окно либо не в фокусе, в этом случае вы хотите сфокусировать его, либо оно уже в фокусе, и повторная фокусировка не причинит вам никакого вреда.

0 голосов
/ 26 ноября 2013

Да, модальная вещь, вероятно, путь, но иногда вам просто нужно сделать это так, как вы хотите.

Я бы использовал старый добрый JavaScript. Назовите окно и поместите его в фокус.

    function showImageWindow(imageURL)
    {
        var imageWindow = window.open(imageURL,"My_Window","width=1000px,height=1000px,menubar=0,titlebar=0,toolbar=0,location=0,scrollbars=0,status=0"); 
        imageWindow.focus();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...