添加元素后,dom.byId返回undefined

时间:2014-10-15 19:21:48

标签: javascript dojo

我有一个将div作为孩子添加到dijit / layout / conentpane的函数。我遇到的问题是,在我添加这个div之后,我无法通过使用dom.byId来引用它:创建此div的函数是从menuitem的click事件中调用的:

菜单项:

<div id="miLMWS" data-dojo-type="dijit/MenuItem" data-dojo-props="onClick:function(){SetPage('LMWS');}">Watershed</div>

onclick函数(SetPage):

....

function (dom, parser, registry, ready, WatershedMap, OWOWMapGallery) {
            window.SetPage = function (pg) {
                //set the page depending on the menu item clicked
                ClearWidget();//destroys previous widget deleting the div
                AddToolDiv();//add the div
                switch (pg) {
                    case 'LMWS':
                        var test = dom.byId("tool"); //this is undefined
                        //WS = new WatershedMap({}, "tool");
                        break;
                }
            };
...

addDivFunction:

function AddToolDiv() {
     //add page div (node where template will be placed in
     var tool = document.createElement("div");
     tool.setAttribute("id", "tool");
     var ContentContainer = registry.byId("MainContent");
      ContentContainer.set("MainContent", tool);
      var test = dom.byId("tool");//this is undefined
 }

每次单击菜单项时,新的自定义窗口小部件都会加载到工具div中。 (有一个函数ClearWidget会破坏旧的小部件和工具div)我在想这可能与调用onClick事件中的函数有关吗?当我第一次加载测试变量时,我调用AddToolDiv正确引用工具div。任何帮助都将非常感激。

由于

2 个答案:

答案 0 :(得分:1)

byId函数将在DOM中搜索具有给定id的元素。如果在调用byId时您的工具元素实际上没有插入DOM,您将得到未定义。

您显示的代码实际上从未将工具元素插入DOM,只会将其传递给ContentContainer.set("MainContent", tool)调用。请务必检查此调用是否实际将工具元素立即插入DOM中。当您致电byId时,ContentConainer本身是否已插入DOM?

答案 1 :(得分:0)

你可以试试这些东西

var test = dom.byId("tool",ContentContainer.domNode);

否则你可以直接拿到这个dom的引用  this.tool = document.createElement("div");

否则使用dojo中提供的domconstruct api