各位大牛,小弟最近在做个页面,其中要做一个附带一点效果的导航栏,用到了一个Jquery插件,http://labs.makotokw.com/s/jquery/menu这个插件所需的代码结构是
<ul>
<li></li>
<li></li>
</ul>我按照这个插件的要求定义好css,然后查看页面。现在有个问题,在页面打开的时候首先显示的是没有加入css时这个<ul>的显示,也就是个最基本的无序列表。差不多0.5秒后,这个<ul>的样式变成我所定义的css,即我想要的导航栏。也就是说刚开页面的时候js是没有执行,<ul>没有加入我定义的css,在js执行后,css加入,显示正常。我试过将插件的初始化js放在document ready事件里,window load事件里,和</body>前,但都不能解决问题。并且我用的一些其他牵涉到css的插件也会有这个问题。想请教如何解决,谢谢!

解决方案 »

  1.   

    用下面方法<script src="" defer></script>  //这里加入defer属性
    //defer作用是文档加载完毕了再执行脚本,这样回避免找不到对象的问题---有点问题
      

  2.   

    $(function(){
        setTimeout('ID.className = "Class"',499);})
      

  3.   

    如果CSS是由插件加载的,那怎么也避免不了,这是正常的。
    正常情况下放在head标签里的JS和CSS会受到浏览器的特别优待,这些JS和CSS没下载完成之前浏览器是处于阻塞状态的,即不展现后面的内容(至于是不是继续下载这个就不清楚了)。所以当我们看到后面内容的时候就一定是JS和CSS都加载完成了的时候,所以从我们看到内容的时候起CSS就已经被应用了页面中了。如果CSS是由JS来加载的,那就没有这个优待了,也就是说如果页面后面的内容先于CSS加载完成(多数情况都会是这样),那你会先看到没有应用CSS样式的HTML,等CSS加载完成之后才能看到应用完CSS的样子。根据这个原理,把初始化JS放进document ready/window onload里面,可想而知,只会使情况更糟而已。
    所以这种情况据个人所知……无解。看看别人有没有什么高招吧。
      

  4.   

    呵呵,一般 js如果想改变页面里面的css的话,一般都会在页面载入完成后执行,避免页面未载入完成而找不到对象,
    对于你遇到的问题
    你可以在相关的地方自己加上页面载入js后会添加的css,就可以解决这个问题了