我最近开始在道场工作。 即使我把这个调用放在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 任何解决方案或解决方法将不胜感激。
提前致谢。
答案 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标记属性(在左侧导航栏上)并运行它,则会得到您描述的行为。