dojo/domReady! 中感叹号的作用

废话

其实不算个技术问题,但实在是花了我不少时间,不记下来都对不起我这浪费掉的几十分钟。

问题

在dojo官网上看教程,跟着做点练习,看到Dojo DOM Functions那节,有一个练习是改变页面上的列表(li)内容,于是我就写了如下代码:

require(["dojo/dom", "dojo/domReady"], function(dom) {
 
    function setText(node, text){
        node = dom.byId(node);
        node.innerHTML = text;
    }
 
    setText(dom.byId("one"), "One has been set");
    setText("two", "Two has been set as well");
});
	<ul id="list">
		<li id="one">One</li>
		<li id="two">Two</li>
		<li id="three">Three</li>
		<li id="four">Four</li>
		<li id="five">Five</li>
	</ul>

跑起来以后,控制台里一直报错,类似"can't set properties of null",意思是dom.byId("one")返回是null,我怎么都觉得不可能,来回核对了id N遍啊N+1遍,又对dom添加观察发现也是正常的。总之,就是来来回回折腾了好久,然后猛地往上一瞄......

解决

"dojo/domReady"应为:"dojo/domReady!"

“The exclamation mark is required to tell Dojo not to execute the callback until the DOM is ready.”

少了这个感叹号,并没有等待dom加载完就开始跑函数了,这个时候即使按正确的id也是返回null。

原文地址:https://www.cnblogs.com/SheilaSun/p/4380892.html