DOjo dijit.byId('')。show();不工作

时间:2011-06-04 18:57:56

标签: dojo

我正在尝试展示一个组件,

   <div dojoType="dojox.layout.TableContainer" cols="2"   labelWidth="50%" colspan=2 id="durationPane" style="display: none;margin-left: 9px;" showLabels=false>
                <div dojoType="dijit.form.DateTextBox" required="true" onChange="var x=arguments[0];x.setDate(x.getDate()+1);dijit.byId('toDate').constraints.min = x;" constraints="{datePattern:'MMM dd yyyy'}"  label=" From Date :" id="fromDate"   placeHolder="From Date"  style="margin-bottom: 50px"></div>
                <div dojoType="dijit.form.DateTextBox" require="true" onChange="var x=arguments[0];x.setDate(x.getDate()-1);dijit.byId('fromDate').constraints.max =x;" constraints="{datePattern:'MMM dd yyyy'}" label="To Date :" id="toDate"  placeHolder="To Date"  name="vpnReport._toDate" ></div>
        </div>

dijit.byId('durationPane').show();

但它没有显示出来。

1 个答案:

答案 0 :(得分:3)

这是一些反复出现的问题,有一些Dojo“动画”效果,如show,hide,wipeIn,wipeOut等。出于某种原因,如果你想让页面元素开始隐藏,那么你可以向后显示它们,你无法初始化他们在CSS中使用“ display:none ”或“ visibility:hidden ”。

三种不同的解决方法(所有这些都暗示您没有在“durationPane”样式中设置“ display:none ”):

  1. 将以下CSS添加到持续时间窗格中: position:absolute; left:-999em; 然后,当你调用.show()时,也将样式设置为 left:0 - 你第一次调用show时只需要这个,因为在下一个.hide()/ .show(),一切正常。这可能是最糟糕的解决方案,因为你必须使你的元素绝对,这可能是混乱的。
  2. 从元素可见开始,然后隐藏它onload,例如

    dojo.ready(function() { dijit.byId('durationPane').hide(); });
    
  3. 从可见元素开始,然后添加 display:none onload,例如

    dojo.style('durationPane', { 'display' : 'none' });
    
  4. 这将做你想要的。如果有人在那里知道为什么Dojo有这种奇怪的行为,并且如果有更优雅的方法来解决这个问题,请告诉我们......