2011-05-05 1 views
3

je problème avec l'événement de mise au point de manipulation dans le code ci-dessous dans IE8 je reçois la sortie suivante:gestionnaire d'événements de mise au point IE retard

LOG: set focus txt1 
LOG: set focus txt2 
LOG: txt1 focus 
LOG: txt2 focus 

mais dans tous les autres navigateurs la sortie est:

LOG: set focus txt1 
LOG: txt1 focus 
LOG: set focus txt2 
LOG: txt2 focus 

il semble que IE8 met en file d'attente toutes les demandes de focus et exécute les gestionnaires d'événements après la fin de la fonction en cours.

Existe-t-il une solution de contournement pour forcer IE8 à se comporter comme les autres navigateurs?

<html> 
<head> 
</head> 
<body> 
<script> 
     function test(){ 
      console.log('set focus txt1'); 
      document.getElementById('txt1').focus(); 
      console.log('set focus txt2'); 
      document.getElementById('txt2').focus(); 
     } 
    </script> 
<input id="txt1" type="text" onfocus="javascript:console.log('txt1 focus')" style="width:100px" /> 
<input id="txt2" type="text" onfocus="javascript:console.log('txt2 focus')" style="width:100px" /> 
<button value="Click" onclick="javascript:test()"></button> 
</body> 
</html> 

Répondre

3

IE retarde la mise au point effective jusqu'à ce que la fonction test() est terminée, alors je crains que vous devez utiliser une construction comme:

function test(){ 
    console.log('set focus txt1'); 
    document.getElementById('txt1').focus(); 

    window.setTimeout(function() { 
     console.log('set focus txt2'); 
     document.getElementById('txt2').focus(); 
    }, 1); 
} 

Ici, je remets la deuxième partie de la fonction de telle sorte que IE aura le temps de mettre l'accent sur txt1 avant que la deuxième partie soit exécutée. Soit dit en passant, vous devez omettre le préfixe javascript: dans les attributs onclick et onfocus. Le préfixe javascript: ne doit être utilisé que dans un attribut href.