2011-04-12 78 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