JavaScript For循环inusual行为

时间:2014-05-13 18:07:19

标签: javascript html jsp web-applications dhtmlx

我有一个带有html内容的jsp文件,里面有一个脚本,我也在使用dhtmlx。我的Web应用程序的其他部分正在工作,因此,我只想关注这个问题,因为环境运行良好。在我的文件的一个点上:

numTabs = getNumTabs();
for (var i=0; i<numTabs;i++) {
    var mytab = "tab_"+i;
    tabbar.addTab(mytab,'Tab Numer: ' + i,'');
    //alert("for " + i); PLACE 1
    initTabContent(mytab);
}

function initTabContent(tabID){
    //alert("initTabContent " + i); PLACE 2
    tab = tabbar.cells(tabID);
    toolbar = tab.attachToolbar();
    toolbar.loadXML('.../...file.xml',function(){
           //alert(i); PLACE 3
           toolbar.setItemText('botton1', 'Botton 1');

    });
    grid = tab.attachGrid();
    //more stuff
}

重点是:

如果我在PLACE 1中取消注释警报,一切都很顺利,它会加载XML并且一切正常,但如果我评论警报它就不顺利。

如果我取消注释警报1和警报2,我将在网页中看到:

  1. 我明白了:&#34; 0&#34; - &GT;行
  2. 我明白了:&#34;对于1&#34;几乎立即改变为&#34; initTabContent 0&#34; - &GT;好的,但我可以看到它
  3. 我明白了:&#34;对于1&#34; - &GT;行
  4. 我明白了:&#34; 2&#34;几乎立即改变为&#34; initTabContent 1&#34; - &GT;行
  5. 我明白了:&#34; 2&#34; - &GT;行
  6. 我明白了:&#34;对于3&#34;几乎立即改变为&#34; initTabContent 2&#34; - &GT;好 ....和
  7. 所以,据我所知,尽管有myfunction,循环仍在继续,并且不会等待该函数的完全终止。 有趣的是,如果我评论警报1和2,并取消注释警报3,我在网页上看到的第一件事是4,然后是3,2,1,0 ......

    如果我再次离开,只有警报1取消注释,一切顺利。我想的原因是警报使系统等待用户,因此XML加载良好。

    我的问题: 第一:为什么循环不等待功能完成?它应该是顺序的吗? 第二:如何在没有警报的情况下解决问题?我也尝试在里面放一个空的for循环来赚取时间,但它没有成功......(这不是一个好方法)

    非常感谢, 亚历克斯。

2 个答案:

答案 0 :(得分:0)

导致您遇到麻烦的部分原因是“警报”警告&#39;阻止执行,而loadXML调用是异步的。 要更准确地描述以什么顺序发生的事情,请使用console.log而不是alert。

您是否尝试在调用myFunction中使用i的值用于除警报之外的其他目的?

如果是这样的话。尝试更换:

myfunction(i);

使用:

(function (num) { return function() {myfunction(num)} })(i);

答案 1 :(得分:0)

感谢@KevinB我意识到整个jsp文件中确实缺少toolbar声明。 在加载XML之前,toolbar = tab.attachToolbar();被覆盖。

现在**var** toolbar = tab.attachToolbar();问题解决了。

要查看循环没有正常运行的原因,您可以阅读问题下的评论。