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



我有一个函数,它将div作为子项添加到dijit/layout/conentpane中。我遇到的问题是,添加这个div后,我无法使用dom.byId引用它:创建这个div的函数是从菜单项的点击事件调用的:

菜单项:

<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。任何帮助都将不胜感激。

感谢

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

您所展示的代码实际上从未将tool元素插入到DOM中,它只将其传递给ContentContainer.set("MainContent", tool)调用。请确保检查此调用是否立即将tool元素插入到DOM中。当您调用byId时,ContentConainer本身是否插入到DOM中?

你可以试试

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

否则您可以直接持有该dom的引用this.tool = document.createElement("div");

否则使用dojo 中提供的domconstruct api

最新更新