2011-05-05 41 views
3

我有在IE8下面的代碼中,我得到以下輸出焦點事件處理的問題:IE焦點事件處理程序拖延

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

但在所有其他瀏覽器的輸出是:

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

IE8似乎將所有焦點請求排隊,並在當前函數結束後執行事件處理程序。

是否有任何解決方法來強制IE8像其他瀏覽器一樣行爲良好?

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

回答

3

IE延遲實際的焦點,直到函數test()完成之後,所以恐怕你不得不用這樣的一個結構:

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

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

在這裏,我推遲功能,使第二部分在執行第二部分之前,IE將有時間將重點放在txt1上。

順便說一下,您應該忽略onclick和onfocus屬性中的前綴javascript:。前綴javascript:只能用於href屬性。