2009-03-25 17 views
9

Sto cercando di mettere a fuoco la finestra usando jquery. La finestra è popup avviata tramite un clic del tasto sulla pagina madre. Ho alcune chiamate Ajax in corso nella finestra secondaria, quindi i dati vengono aggiornati. Il mio problema è che se l'utente fa clic sulla finestra padre e nasconde il bambino dietro di esso, vorrei riportare quella finestra secondaria in primo piano se c'è un aggiornamento dei dati.Come mettere a fuoco una finestra in jquery?

all'interno $ (document) .ready I cablare questi eventi:

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

Poi, se i dati vengono aggiornati, io chiamo questa funzione:

function FocusInput(){ 

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

Questo funziona come previsto in IE8, ma in FireFox (e in tutti gli altri browser) l'evento di sfocatura sembra essere attivato se faccio clic sulla finestra principale. Qualche suggerimento/idea su come raggiungerlo?

aggiornamento:

Totale momento facepalm: in Firefox: * Strumenti * Opzioni ... * Tab Content * pulsante Avanzate accanto a “Abilita JavaScript” * selezionare la casella denominata "Aumentare o diminuire di Windows "

+0

Metti la risposta in una risposta separata in modo da poterlo sviare e ottenere la domanda dalla lista senza risposta. –

risposta

2

Totale momento facepalm: in Firefox:

  • Strumenti
  • Opzioni ...
  • scheda Contenuto
  • pulsante Avanzate accanto a “Abilita JavaScript”
  • spunta la casella denominata "Raise o Windows "

Questo è disattivato da de errore e deve essere abilitato. Inoltre, supponevo che dal momento che non funzionasse in Chrome, Safari sarebbe lo stesso, ma tu sai cosa dicono di "assumere" (funziona in Safari, ma non in Chrome).

1

Sembra che non si dovrebbe importare di sapere quando la finestra si è offuscata. Quando i tuoi dati si aggiornano, la tua finestra non è a fuoco, nel qual caso vuoi metterla a fuoco o è già a fuoco, e focalizzarla di nuovo non ti danneggia.

+0

beh, il ragionamento è che la finestra secondaria ha un input di testo, e io non voglio che il focus sia preso da quello. In ogni caso, $ (window) .focus() non sembra fare nulla in FF. –

+1

Hai provato a fare 'window.focus()' senza la chiamata jquery? – levik

2

Se non c'è una ragione forte per avere due finestre separate, allora sarebbe meglio usare "caselle modali", ci sono un sacco di esempi là fuori e plugin jquery per raggiungere questo obiettivo. Un esempio di tale plug-in: http://www.84bytes.com/2008/06/02/jquery-modal-dialog-boxes/

+0

non posso usare un modale, deve essere una finestra separata. –

+1

In tal caso prova a richiamare lo stato attivo dalla finestra padre: url = 'someUrl' newWin = window.open (url, "helpWin", "features"); ... newWin.window.focus() – Miquel

+0

Uno dei motivi principali è la sicurezza: la finestra genitore potrebbe essere 'http' regolare e deve aprire una finestra che sia' https'. – JohnK

1

Hai assolutamente ragione. In FF, sembra come se sparasse l'evento, ma allo stesso tempo, sembra che non registri l'elemento come focalizzato. Pertanto l'evento di sfocatura non può mai essere attivato. Non sono sicuro che lo stia spiegando correttamente ... Il seguente codice dice tutto.

In questo esempio, la casella è nascosta per impostazione predefinita, ma viene visualizzata tramite il listener di eventi focus. In IE 8, se si fa clic sulla finestra principale, spara ancora mosso, ma in FF non è così:

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

per il vostro bisogno, sarebbe fattibile per impostare uno sfondo di sovrapposizione? Qualcosa che è una posizione fissa @ top: 0 e left: 0 che occupa l'intero schermo e ha uno z-index inferiore al tuo popup. In questo modo, quando fanno clic sulla sovrapposizione, ruberanno la messa a fuoco e quindi potrai nascondere tutto ...? IDK, solo un suggerimento. Continuerò a fare casino e vedrò se riesco a capirlo. Buona domanda.+1

+0

no, l'idea è di consentire alla persona di esplorare il sito Web e di portare la finestra secondaria in primo piano solo quando è stato effettuato un aggiornamento dei dati. –

+0

la trovano ... im un idiota: in Firefox: Strumenti * * Opzioni ... * Tab Content * pulsante Avanzate accanto a “Abilita JavaScript” * selezionare la casella denominata "aumentare o diminuire di Windows" –

0

Sì, la cosa modale è probabilmente la strada da percorrere, ma a volte devi solo farlo nel modo in cui vuoi farlo.

Vorrei usare il vecchio JavaScript semplice. Dai un nome alla finestra e mettila a fuoco.

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(); 
    } 
Problemi correlati