2012-02-17 21 views
7

Pencere, belge veya gövdeye bağlı olduğunda, javascript odak ve bulanıklık olaylarının Android tarayıcıda doğru şekilde tetiklenmediğini öğrendim. ,Pencere odaklama ve Android tarayıcıda doğru çalışmıyor olayları bulanıklık

<!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, form girdi elde ettiğini ise şu odak:

Ben masaüstü tarayıcılarda düzgün çalıştığını basit bir test komut dosyası worte ama Android stok tarayıcı, Dolphin ve Opera mobil başarısız olay işleyicisi tetiklenir ve bulanıklıkta, bulanık olay işleyicisi iki kez ateşlenir.

Bunun için iyi bir çözüm veya bir çözüm var mı?

DÜZENLEME: beklenen sonuç başka uygulamaya bir tarayıcı sekmesi veya değişiklik değiştirirseniz, bulanıklık olay tetiklenmesi gerektiğini, olurdu ve ben tarayıcı sekmesine dönersem, odak olay kovmalıyım (masaüstünde bu şekilde çalışıyor)

+0

jQuery'yi denediniz mi? Farklı tarayıcılarda daha tutarlı olmaları için olayların normalleştirilmesi çok fazladır. – Walf

+0

Evet, jQuery ile başladım, jQuery hatalarını hariç tutmak için örneği basit bir şekilde javascript'e indirdim. – dioslaska

+0

Örneğinizin Android tarayıcısında beklenen sonucu nedir? – Uooo

cevap

0

Kodunuzu sadece Galaxy Jexbean (tüm sahip olduğum) çalıştıran bir kod üzerinde test ettim ve bu kod kusursuz çalışıyor ve her iki olay da yalnızca bir kez ateşleniyor.

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>'; 
};​ 

en mobil cihazlarda, normalde başına se "bulanık" olamaz penceresini hedef aldıklarını olabilir. Öğeyi, kendi bulanıklaştırma ve odaklama etkinliklerini bildirmesi için doğrudan sorduğunuzdan emin olun.

EDIT: Ayrıca, olay dinleyicilerini uygulamadan önce DOM'ın hazır olmasını beklediğinizden emin olun.

+1

Belge öğelerinde çalıştığını biliyorum, ancak özellikle pencere öğesinde kullanmak istedim. Beklenen sonuç, bir tarayıcı sekmesini değiştirdiğimde veya başka bir uygulamaya geçtiğimde, bulanıklık olayının tetiklenmesi ve tarayıcı sekmesine geri dönersek, odak etkinliğinin (masaüstünde bu şekilde çalıştığı) tetiklenmesi gerektiğidir. – dioslaska