2009-03-25 613 views
9

Estoy tratando de enfocar la ventana usando jquery. La ventana se inicia con un clic en la página principal. Tengo algunas llamadas ajax en la ventana secundaria, por lo que los datos se están actualizando. Mi problema es que si el usuario hace clic en la ventana principal y oculta al niño detrás de ella, me gustaría volver a poner esa ventana secundaria en primer plano si hay una actualización de datos.¿Cómo llevar el foco a una ventana en jquery?

dentro de $ (document) ready puedo conectar estos eventos:

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

Entonces, si se actualizan los datos, que llama a esta función:

function FocusInput(){ 

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

Esto funciona como se esperaba en Internet Explorer 8, pero en FireFox (y en todos los demás navegadores), el evento Blur nevers parece dispararse si hago clic en la ventana principal. ¿Alguna sugerencia/idea sobre cómo lograr esto?

actualización:

total momento facepalm: en Firefox: * Herramientas * Opciones ... * Contenido de la ficha * botón Avanzado junto a “Activar JavaScript” * marque la casilla denominada "subir o bajar de Windows "

+0

Pon tu respuesta en otro resultado por lo que podemos votar y obtener la pregunta de la lista No respondidas. –

Respuesta

2

total momento facepalm: En Firefox:

  • Herramientas
  • Opciones ...
  • pestaña Contenido
  • botón Avanzado, junto a “Activar JavaScript”
  • verificación de la casilla denominada "Raise o Windows inferior "

esto está desactivado por de falla y debe estar habilitado. Y también, asumí que dado que no funcionaba en Chrome, Safari sería lo mismo, pero sabes lo que dicen sobre "asumir" (funciona en Safari, pero no en Chrome).

1

Parece que no debería preocuparse por saber cuándo se borró su ventana. Cuando sus datos se actualizan, su ventana no está enfocada, en cuyo caso desea enfocarla, o ya está enfocada, y enfocarla nuevamente no le perjudicará.

+0

Bueno, el razonamiento es que la ventana secundaria tiene una entrada de texto, y no quiero que se quite el foco de eso. Pero en cualquier caso, $ (ventana) .focus() no parece hacer nada en FF. –

+1

¿Intentó simplemente hacer 'window.focus()' sin la llamada jquery? – levik

2

Si no hay una razón fuerte para tener dos ventanas separadas, entonces sería mejor usar "cajas modales", hay muchos ejemplos y plugins jquery para lograr eso. Un ejemplo de dicho complemento: http://www.84bytes.com/2008/06/02/jquery-modal-dialog-boxes/

+0

no puede usar un modal, tiene que ser una ventana separada. –

+1

En ese caso intente llamar al foco desde la ventana principal: url = 'someUrl' newWin = window.open (url, "helpWin", "features"); ... newWin.window.focus() – Miquel

+0

Una razón importante es la seguridad: la ventana principal puede ser 'http' normal y necesita abrir una ventana que sea' https'. – JohnK

1

Tiene toda la razón. En FF, parece que desencadena el evento, pero al mismo tiempo, parece que no registra el elemento como centrado. Por lo tanto, el evento de desenfoque nunca se puede disparar. No estoy seguro de que esté siquiera explicando eso correctamente ... El siguiente código lo dice todo.

En este ejemplo, el cuadro está oculto de forma predeterminada, pero se muestra a través del detector de eventos de enfoque. En IE 8, si hace clic en la ventana principal, todavía dispara desenfoque, pero en FF no es así:

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

Para su necesidad, ¿sería posible configurar un fondo de la superposición? Algo que es una posición fija @ top: 0 y left: 0 que ocupa toda la pantalla y tiene un índice z que es menor que su ventana emergente. De esa manera, cuando hagan clic en la superposición, robará el foco y luego podrás ocultar todo ... IDK, solo una sugerencia Seguiré dando vueltas y veré si puedo resolverlo. Buena pregunta.1

+0

no, la idea es permitir que la persona explore el sitio web y solo lleve la ventana secundaria al frente cuando haya habido una actualización de datos. –

+0

encontrado ... im un idiota: en Firefox: Herramientas * * Opciones ... * * contenido de la ficha botón Avanzado junto a “Activar JavaScript” * marque la casilla denominada "Subir o Bajar Windows" –

0

Sí, lo modal es probablemente el camino a seguir, pero a veces solo tienes que hacerlo de la forma en que quieres hacerlo.

Usaría el JavaScript antiguo. Nombra la ventana y la enfoca.

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(); 
    } 
Cuestiones relacionadas