我正在使用dojo 1.6并尝试使用以下代码处理表单页面:

dojo.forEach(dojo.query(".form-page"), function(page, i){
    if(page.id == "form-part1"){
        dojo.style(page, "display", "block");
    }else{
        dojo.style(page, "display", "none");
    }
 });

 dojo.query(".nextPgButton").connect("onclick", function(){
      var pages = dojo.query(".form-page");
      dojo.forEach(pages, function (page, i){
          if(dojo.style(page, "display") != "none"){
               dojo.style(page, "display", "none");
               dojo.style(page[i+1], "display", "block");
           }
      });
 });


第一条语句可以正常工作,因为仅按预期显示了第一页。但是第二个不能正确检索页面的当前样式。因此,当我单击我的下一页按钮时,所有页面都被隐藏。

dojo.style(page,"display") // always return "block"


有人可以告诉我为什么dojo.style无法检索页面的实际样式吗?

非常感谢

最佳答案

您正在那里做一些非常奇怪的事情。

由于page[i+1]不是数组,因此最后一行与page在一起实际上将永远无法工作。我想您可能是说pages[i+1]

如果您的意思确实是我刚才所说的话,那么常传它会返回block。仅考虑您有两个.form-page元素的情况。单击您的按钮时,将发生以下情况:

第一次迭代:
ID为#form-part1的第一个元素具有display: block,因为您最初以这种方式进行设置。显然,这意味着正在执行if()中的forEach()语句,因为它不等于"none"

这意味着将#form-part1的样式设置为display: none,但是也意味着将下一个元素CSS设置为display: block

第二次迭代:
现在,您的第二个.form-page具有display: block(请阅读上一次迭代的最后一句话)。这意味着还将执行if(),将样式设置回display: none

它还将尝试查找下一页,但是没有其他页面了,因此它还会引发错误(代码中的另一个错误)。



因此,显然您必须重新检查代码,因为您做错了某些事情。您还必须重新表达您的问题,因为目前尚不清楚您实际上要实现什么目标。但是对我来说,如果您有2页,则总是执行if()语句。

07-24 09:38
查看更多