即使在dojo.addOnLoad()中,dijit.byId()也返回undefined

时间:2011-08-24 17:36:32

标签: javascript undefined dojo

我最近开始在道场工作。 即使我把这个调用放在dojo.onLoad()中,dijit.byId()也会返回undefined。

<script type="text/javascript"> 
dojo.require("dijit.form.Select");
function myhandler(ev)
{
    var mydiv = dojo.byId('mydivid');
    if (ev == 'Disable') {
        mydiv.style.display = 'none';
    } else {
        mydiv.style.display = 'block';
    }
}
function regHandler()
{
    var item = dijit.byId("myState");
    alert(item);//shows undefined
    dojo.connect(dijit.byId("myState"), 'onChange', myhandler);
}
dojo.addOnLoad(regHandler);
</script>

<select input class="dialogInputElement" dojoAttachPoint="myState" dojoType=dijit.form.Select name="myState" id="myState" value='Enable' style="margin-bottom:5px">
<option value="Enable">Enable</option>
<option value="Disable">Disable</option>
</select>

如果我使用setTimeout()延迟dijit.byId()调用它可以正常工作。 dojo版本是1.4.2 任何解决方案或解决方法将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:4)

如果这是从您的代码中逐字逐句显示的,那么您似乎缺少dojoType声明周围的双引号。如果您的输入永远不会被声明为dijit小部件,那么dijit.byId()永远无法检索它。

如果您想要更通用的节点选择器,请改用dojo.byId(),它将选择任何具有id的节点,而不仅仅是dijit小部件。

答案 1 :(得分:2)

您是否尝试将属性djConfig =“parseOnLoad:true”添加到dojo配置中?

当您包含dojo.js库文件时,您可以设置如下属性:

<script type="text/javascript" src="dojo/dojo.js"
        djConfig="parseOnLoad: true">
</script>

在我的测试中,这似乎解决了这个问题。在此jsfiddle注释中,如果删除djconfig标记属性(在左侧导航栏上)并运行它,则会得到您描述的行为。