高手请进,dreamweaver vs2008同调一个JS不兼容,vs2008里,用IE8浏览也没问题,IE6就不行了
function tab(a,b,c)
{
for(i=1;i<=b;i++){ 
if(c==i)

// 判断选择模块
document.getElementById(a+"_mo_"+i).style.display = "block";  // 显示模块内容
document.getElementById(a+"_to_"+i).className = "no";   // 改变菜单为选中样式

else{ 
// 没有选择的模块
document.getElementById(a+"_mo_"+i).style.display = "none"; // 隐藏没有选择的模块
document.getElementById(a+"_to_"+i).className = "q";  // 清空没有选择的菜单样式


}这是我写的一个简单的JS,为什么在IE8中有用,IE6中没有效果呢?
而且在DW中,哪个浏览器都能用,在VS2008里,IE就不行了,而且在vs2008里,我还加了兼容代码

解决方案 »

  1.   

    一个个alert出来,看看有没有undefined的东西没有。
      

  2.   

    这个怎么alert出来啊,没有变量啊~~
      

  3.   

    有些js就是ie6和ie8有别的,网上找下相关资料
      

  4.   

    是不是获取控件的写法不一样啊?
    还有啊,在DW中,不管是IE6还是IE8都没有问题的呀,可是转到VS里就不行了,这个怎么解?
      

  5.   

    IE8与IE6和IE7的区别 备忘笔记
    2009-04-14 09:13测试了一两天的IE8发现,其中有很多东西都是和IE6和IE7不同的地方,包括css和javascript两个方面,在此记录备忘1 IE8中的css中关于width或是height中如果使用像素形式作为参数时,参数必须是带“px”的,而且此参数必须是大于0的,而在IE6和IE7中是支持不带“px”参数的,而且参数是可以为一个负数。2 IE8中的css中“border-style:outset ;”是没有效果的。3 IE8中的无序列表<ui>之间的距离要比IE6和IE7大的多,而且我还没有找到调整的方法。4 在IE8中,一个Iframe中取event.x的值不是Iframe中的相对x坐标,而是最外层的window的x坐标,但是event.y却是取的是 Iframe中的相对y坐标。而在IE6和IE7中,event.x和event.y却得的都是所在Iframe中的相对坐标,真是搞不懂!可以用 event.clinetX代替。5 IE8中的javascript中function对象例如:      function a(){
                alert("haha");
           }      var fun=new Function("",a);
          alert(fun);此时返回的值为function anonymous(){function a(){alert("haha")}} 而在IE6和IE7中返回的值为function anonymous(){alert("haha")};也就是说当Function的第二个参数如果是一个函数时,IE8对此参数作用的是整个函数的代码,而IE6和IE7则是对此参数起作用的是函数的内部代码(不包括 “function a(){”和“}”的函数头和尾)6 IE8中expression函数不起作用。所以如何在css中写javascript代码还不清楚。7.如下代码
    .regDiv{
        background-image:url(image/bg.gif); MARGIN: 0px auto; WIDTH: 800px;
    }
    .regWrap{
        vertical-align:center ;border:0px ;margin:0 auto; width:95%
    }
    .regWrap TD{
        FONT: 12px/25px 'arial';
        VERTICAL-ALIGN: buttom;
        PADDING-TOP: 2px;
        PADDING-BOTTOM: 2px;
        PADDING-LEFT:5px;
        white-space:nowrap;
        vertical-align:bottom;
    }
    .regWrap EM {
        PADDING-RIGHT: 5px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; COLOR: #cc0000; PADDING-TOP: 0px
    }
    .regWrap SPAN{
        PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px;OVERFLOW: hidden; HEIGHT: 20px;color: #999999
    }
    .regWrap INPUT{
        HEIGHT: 18px
    }
    A{
        FONT: 12px/12px 'arial';
        COLOR: #039;
        TEXT-DECORATION: none;
    }这段代码中如果在IE8以下版本中,A的样式是无效的,而在IE8中是有效的。但是如果把A{……}的样式放在.regWrap{……}前面,这样IE8及以下版本中A的样式就都有效了。@看了下。。 。在IE6里面做的网站其中的高度为一像素表格在IE8里面显示的不是一像素了。 总之变的很明显的大了@bug or something else
    <div style="width:300px;float:left;clear:both;(这里的clear无关紧要似的)">
    <a href="#"><img alt="" src="tl.png"/></a><a href="#"><img alt="" src="pl.png"/></a>
    </div>以上这段代码,在IE8里面,如果我们给img一个float:left;属性那么a标签就会自动产生3px的margin-left(也可以理解为 img标签会吧),即便在样式里面用a{padding:0;margin:0;}都不行,给img这样做也不行,即便是inline style;再者,如果我们给a一个width属性,那么除了3px的margin-left,我们还能看到4像素的margin-top或者说是 padding-top在掉下来的第二个a标签的头部,但是在IE8以前版本以及其他浏览器上是正常显示的(虽然给imgfloat属性是没有必要的)
    解决方案?暂时没有吧——但是可以避免,就是不要滥用float;
    困惑<div class="layout-right">
    <div class="list-1 height-72" style="width: 100%;float:left;"><a href="mailto:[email protected]"><img alt="团长信箱" src="images/tl.png" /></a><a href="mailto:[email protected]"><img alt="书记信箱" src="images/pl.png" /></a></div>
    <div class="list-2" style="width: 273px;float:left;">
    这个地方有点纠结——因为两张图片的宽度加起来正好一共300px,而整个容器也是layout-right,list-1,list-2都是 300px,内第一个div,给浮动,里面的图片似乎也得给浮动(这和第一个例子不一样,似乎是因为外面的大容器对内部的内部的元素也产生了影响),不然会自动选择换行显示,且头部还会多出一点间距来(已经给img,a padding,margin在外导入样式表清0了)即便理论上是刚刚能挤下来(这是在除IE8的nav里都能做到的),好,那我们给img浮动吧,可是很不幸,第二个a标签会向下掉若干个像素(具体什么规律和原理我还不知道),虽然a img 的margin padding清0工作是已经做了的——
    但是如果给a,img一个inline style margin padding 0 ,又偏偏能起到作用,这让我怀疑自己代码的规范性了——但我确实给了a,img一个margin padding清零的class,而且并未被覆盖——纠结中——但是这个教训却总结出来了,就是必须使自己的代码十分的规范,规范,再规范—— 
      

  6.   

    我瞎猜的,你试试(注意红色字):function tab(a,b,c)
    {
    for(i=1;i<=b;i++){ 
    if(c==i)

    // 判断选择模块
    document.getElementById(a+"_mo_"+i).style.display = ""; //将block改成了空串
    document.getElementById(a+"_to_"+i).className = "no"; // 改变菜单为选中样式

    else{ 
    // 没有选择的模块
    document.getElementById(a+"_mo_"+i).style.display = "none"; // 隐藏没有选择的模块
    document.getElementById(a+"_to_"+i).className = "q"; // 清空没有选择的菜单样式


    }
      

  7.   

    谁知道在JS中获取控件的方法除了:document.getElementById(a+"_mo_"+i).style.display = ""这个以外还有别的方式没有啊?
      

  8.   

    小虎说的对,你一个一个打出来
    不一定要变量,
    可以
    alert(document.getElementById(a+"_mo_"+i).style.display);
    这样打。
      

  9.   

    alert(document.getElementById(a+"_mo_"+i).style.className);
    这个弹出来的为undefined,这个是为什么啊?
      

  10.   

    问题可能出在你的id获得没有成功,你用alert把id输出下,试试,如果输出为null,说明没有获取到id;如果是object,说明取得id,你可以安装你想要的流程,通过alert("debug is here")验证是不走到你想要的代码位置了,代码肯定有问题
      

  11.   

    我的程序现在没有问题了,可是alert(document.getElementById(a+"_mo_"+i).style.className)的值是undefined,这是为什么啊?
    难道className是不可读的?还是怎么回事???
      

  12.   

    我的程序现在没有问题了,可是alert(document.getElementById(a+"_mo_"+i).style.className)的值是undefined,这是为什么啊?
    难道className是不可读的?还是怎么回事???
      

  13.   

    感动的我一把鼻涕一把泪的。。谢谢啊~~
    我在重申一遍问题:
    可是alert(document.getElementById(a+"_mo_"+i).style.className)的值是undefined,这是为什么啊?
    难道className是不可读的?还是怎么回事???
      

  14.   

    alert(document.getElementById(a+"_mo_"+i).style.className)肯定是空啊
    应该是alert(document.getElementById(a+"_mo_"+i).className)吧