2012-02-17 14 views
7

Ho scoperto che gli eventi di messa a fuoco e sfocatura javascript non vengono attivati ​​correttamente sul browser Android, se collegati a finestra, documento o corpo.l'attivazione della finestra e gli eventi di sfocatura non funzionano correttamente sul browser Android

ho Worte un semplice script di test che sta lavorando correttamente su browser desktop, ma fallisce su Android browser magazzino, Delfino, e mobile Opera:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" /> 
    <title>Focus test</title> 

    <script type="text/javascript"> 

     window.onfocus = function() { 
      document.getElementById('console').innerHTML += '<div>Focus event handler fired.</div>'; 
     }; 
     window.onblur = function() { 
      document.getElementById('console').innerHTML += '<div>Blur event handler fired.</div>'; 
     }; 

    </script> 
</head> 

<body> 
    <input id="test" name="test" /> 
    <div id="console"></div> 
</body> 

</html> 

Intresting è, che se l'ingresso modulo è sempre messa a fuoco, il gestore di eventi si attiva e, in caso di sfocatura, il gestore eventi di sfocatura viene attivato due volte.

Qualcuno ha una buona soluzione o una soluzione alternativa per questo?

EDIT: Il risultato atteso sarebbe, che se cambio una scheda del browser, o passare a un'altra applicazione, l'evento sfocatura dovrebbe fuoco, e se torno alla scheda del browser, l'evento di messa a fuoco dovrebbe fuoco (è così che funziona sul desktop)

+0

Hai provato jQuery? Fa un sacco di normalizzazione degli eventi in modo che siano più coerenti tra i diversi browser. – Walf

+0

Sì, ho iniziato con jQuery, ho appena rimosso l'esempio in javascript, per escludere eventuali bug jQuery. – dioslaska

+0

Qual è il risultato previsto del tuo esempio su un browser Android? – Uooo

risposta

0

Ho appena testato il codice su un Galaxy Nexus che esegue jellybean (tutto ciò che ho) e questo codice funziona perfettamente ed entrambi gli eventi si attivano solo una volta ciascuno.

document.getElementById('test').onfocus = function() { 
    document.getElementById('console').innerHTML += '<div>Focus event handler fired.</div>'; 
}; 
document.getElementById('test').onblur = function() { 
    document.getElementById('console').innerHTML += '<div>Blur event handler fired.</div>'; 
};​ 

potrebbe essere che si stava designando la finestra, che sulla maggior parte dei dispositivi mobili, non può essere normalmente "offuscata" per-sé. Assicurati di chiedere direttamente all'elemento di segnalare i propri eventi di sfocatura e messa a fuoco.

MODIFICA: Inoltre, assicurati di attendere che il DOM sia pronto prima di applicare i listener di eventi.

+1

So che funziona sugli elementi del documento, ma ho voluto specificatamente utilizzare l'elemento della finestra. Il risultato atteso sarebbe che, se cambio una scheda di un browser o passi a un'altra app, l'evento di sfocatura dovrebbe attivarsi e se torno alla scheda del browser, l'evento di messa a fuoco dovrebbe essere attivato (è così che funziona sul desktop) – dioslaska