2011-04-12 87 views
0


爲什麼下面的代碼不會關注過濾選擇?焦點過濾選擇頁面加載

<!DOCTYPE html> 
    <html> 
    <head> 
    <script type="text/javascript" src="http://yandex.st/dojo/1.6.0/dojo/dojo.xd.js" djConfig="parseOnLoad: true"></script> 
    <style type="text/css"> 
      @import "http://yandex.st/dojo/1.6.0/dijit/themes/claro/claro.css"; 
    </style> 
    <script type="text/javascript"> 
    <!-- 
    dojo.require("dijit.form.FilteringSelect"); 

    dojo.addOnLoad(function(){ 
     dijit.byId('dept').focus(); 
    }); 

    --> 
    </script> 
    </head> 
    <body class="claro"> 
    <select name="dept" id="dept" dojoType="dijit.form.FilteringSelect" > 
     <option value=""></option> 
     <option value="test">test</option> 
     <option value="test1">test1</option> 
    </select> 
    </body> 
    </html> 

我試過用ie7和firefox 3/4 - 它的工作原理。
但在IE8中失敗:-(
可能這是一個錯誤道場 - 還是我做錯了什麼
不dojo.addOnLoad()火災後的DOM準備好,或者畢竟小部件已經被適當的時候? ?initalized
問候
格哈德

回答

0

這是非常intresting錯誤..我已經做的小調查,發現解決方案。也許它看起來像一個「骯髒的黑客」,但它仍然可以幫助你。用戶

dojo.addOnLoad(function() { 
     setTimeout(function() { dijit.byId('dept').focus() }, 400); 
}); 

並不明顯,但它給IE片刻呼吸:

,你可以簡單地添加超時。

It's work in IE8 for me

+1

有趣的是,當我嘗試這個時,它甚至設置爲0,因爲超時工作 - 這表明簡單地推遲這行代碼,直到準備過程完成就足夠了。不知道爲什麼這是必要的(似乎只在IE 8專門);爲了回答Gerhard的問題,addOnLoad/ready回調函數在(1)DOM準備就緒(或者不支持'DOMContentLoaded'的IE中的'window.onload')之後執行,(2)所有的'dojo.require'd模塊(3)如果'parseOnLoad'爲真,解析器已經運行並且小部件被啓動。 – 2011-04-13 02:50:22

+0

昨天的進一步研究使我得出了同樣的結論。我會搜索dojo-trac來查找類似的bug,或者申請一個新的! – 2011-04-13 06:53:16

0

我不知道是什麼瀏覽器完全支持這一點,但你可以嘗試:

<select name="dept" id="dept" dojoType="dijit.form.FilteringSelect" autofocus> 

另外,我不明白爲什麼您使用的是Import聲明如果你願意ð只是使用鏈接標籤:

前:

<style type="text/css"> 
    @import "http://yandex.st/dojo/1.6.0/dijit/themes/claro/claro.css"; 
</style> 

後:

<link rel="stylesheet" type="text/css" href="http://yandex.st/dojo/1.6.0/dijit/themes/claro/claro.css"> 
+0

我懷疑'autofocus'也會有所影響,因爲這'select'標籤最終會被FilteringSelect來小部件,它不承認任何'autofocus'屬性替換。 – 2011-04-13 02:30:49