2010-02-18 5 views
2

Vous avez trébuché sur ce qui semble être un bug avec la façon dont safari mobile rend le curseur quand un window.scrollTo() est exécuté pendant qu'un utilisateur saisit du texte dans une zone de texte. Avoir le code source ci-joint qui illustre le problème. Je me demande si quelqu'un a des conseils sur la façon dont je pourrais contourner cela.Mobile Safari scrollPour w/textarea bug

La question: Si un utilisateur saisit du texte dans une zone de texte et un window.scrollTo() est exécutée, le curseur reste rendu à la position du textarea utilisé être, non pas à sa position actuelle.

Pour recréer: Chargez la page Web suivante à l'aide d'un safari mobile. Touchez la zone de texte, ce qui ouvrira le clavier. Tapez quelques caractères et attendez. Comme le texte est ajouté dynamiquement à la page, et la fenêtre défilée, vous verrez l'artefact du curseur

Avez essayé de remettre le focus() à la zone de texte après le défilement, mais cela ne semble pas avoir d'effet .

Merci!

<html> 
<head> 
    <meta id="viewport" name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;" /> 
    <style type="text/css" media="screen"> 
     textarea { 
      margin-top:50px; 
     } 
    </style> 
    <script type="text/javascript" charset="utf-8"> 
     window.addEventListener('load', function() { 
      setTimeout(addContent,5000); 
     }, false); 


     function addContent() { 
      var elem = document.createElement('p'); 
      elem.appendChild(document.createTextNode('Some new text')) 
      document.getElementById('newContentContainer').appendChild(elem); 
      window.scrollTo(0,20); 
      setTimeout(addContent,5000); 
     } 
    </script> 
</head> 
<body> 
     <div id="newContentContainer"></div> 
     <div> 
      <textarea></textarea> 
     </div> 
</body> 
</html> 

Voici une photo qui montre le problème: alt text

+0

Y at-il un billet ouvert avec Apple à ce sujet? –

+0

J'ai effectivement soumis quelque chose, mais je n'ai rien entendu depuis ... Je suis passé à d'autres choses, donc je n'ai pas encore essayé avec iOS 4. – Matty

Répondre

2

Je suis assez sûr que ce peut résoudre le problème, et très probablement sera également le flash du clavier à l'écran hors tension et pendant un tout petit peu aussi. Appelez ce code après avoir utilisé scrollTo():

yourTextArea.blur(); 
yourTextArea.focus(); 
+0

J'ai essayé cela. Cela règle le problème, mais je ne suis pas satisfait de l'ouverture et de la fermeture brusques du clavier. Il est difficile de continuer à taper si le défilement se produit au milieu de la frappe. – Matty

+0

Eh bien, autant que je sache, c'est votre seule solution car ce bug ne peut pas vraiment être corrigé sans réellement réparer le logiciel lui-même. –

Questions connexes