问题
1。createTab方法有3个参数 为什么title参数取不到值,但是content取的到
页面上有说明2。里面有个change
一个是 change()  一个this.change()
怎么在一个方法里面调用另一个this.change()???  
  var li = document.createElement("li")
        li.className="li2"
        li.onclick= function(){change(event.srcElement)}; 
        //li.innerHTML=title[i]
        li.innerHTML = con[i]
        li.style.width=this.width
        ul.appendChild(li)
上面红色的地方就是change  用this.change就行不通3.有个add按纽   如何直接调用方法  我上面写的是先调用一个函数  在调用的方法4。
for(var i=0;i<num;i++)                                 //循环输出title和content
 {
    if(i==0)
    {
        var li = document.createElement("li")
        li.className="li2"
        li.onclick= function(){change(event.srcElement)}; 
        //li.innerHTML=title[i]
        li.innerHTML = con[i]
        li.style.width=this.width
        ul.appendChild(li)
        
        var div1 = document.createElement("div")
        div1.className = "div1"
        div1.innerHTML = con[i]
        content.appendChild(div1)
    }
    else
    {
        var li = document.createElement("li")
        li.className="li1"
        //li.innerHTML=title[i]  为什么title[i]取不到直,但是con[i]取的到了??? 不明白
        li.innerHTML = con[i]
        li.onclick= function(){change(event.srcElement)}; //参数用的是event.srcElement 用li.id就取不到正确,请大虾请教,如何避免这样的情况
        li.style.width=this.width
        ul.appendChild(li)
        
        var div2 = document.createElement("div")
        div2.className = "div2"
        div2.innerHTML = con[i]
        content.appendChild(div2)
    }
 }5.
不是很明白哪写该做属性  哪写该做方法 真的不明白, 我觉得全部都可以做参数(- - !)还像还有 先问到这里吧  
请大虾们指教下,谢谢!!

解决方案 »

  1.   

    应该是div在IE和FF中对宽度的定义不同的原因,具体怎么改就不知道
      

  2.   

    1 为什么没获取到,因为你又定义了一个title变量
    -------------------------------
    Tab.prototype.createTab=function(num,con,title){  //num为选项卡的个树   con为对应内容的叔祖  title为对应标题
    document.getElementById(this.parentId).style.width=this.width*num +1     //得到父div的宽度var title = document.createElement("div")    2,为了兼容ff,你修改下事件的传递就好了
    -----------------------
    for(var i=0;i<num;i++)                              
     {
        if(i==0)
        {
            var li = document.createElement("li")
            li.className="li2"
            li.onclick= function(e){e=e||event;change(e.target||e.srcElement)}; //================================        li.innerHTML = con[i]
            li.style.width=this.width
            ul.appendChild(li)
            
            var div1 = document.createElement("div")
            div1.className = "div1"
            div1.innerHTML = con[i]
            content.appendChild(div1)
        }
        else
        {
            var li = document.createElement("li")
            li.className="li1"
            alert(title[i])        li.innerHTML = con[i]
            li.onclick= function(e){e=e||event;change(e.target||e.srcElement)}; //================================
            li.style.width=this.width
            ul.appendChild(li)
            
            var div2 = document.createElement("div")
            div2.className = "div2"
            div2.innerHTML = con[i]
            content.appendChild(div2)
        }3,js脚本都没问题了,还有就是显示的问题,你需要修改css,你原来的样式在ff下头部换行了这个css修改我也不太行:-)
      

  3.   

    1。createTab方法有3个参数 为什么title参数取不到值,但是content取的到 
    --------
    回答过了2精简了下你的代码,很多都不需要用的
    ---------
    for(var i=0;i<num;i++)                                 //循环输出title和content
     {
        //if(i==0)
        //{
            var li = document.createElement("li")
            li.className=i==0?"li2":"li1";//===========================================
            li.onclick= function(){PackUp.change(this)}; //使用闭包变量来调用change,而不是this,因为此时this==li这个元素
            li.innerHTML=title[i]
            //li.innerHTML = con[i]
            li.style.width=this.width
            ul.appendChild(li)
            
            var div1 = document.createElement("div")
            div1.className =i ==0?"div1":"div2"//====================================
            div1.innerHTML = con[i]
            content.appendChild(div1)
      /*  }
        else
        {
            var li = document.createElement("li")
            li.className="li1"
            li.innerHTML=title[i]  
            //li.innerHTML = con[i]
            li.onclick= function(){PackUp.change(this)}; 
            li.style.width=this.width
            ul.appendChild(li)
            
            var div2 = document.createElement("div")
            div2.className = "div2"
            div2.innerHTML = con[i]
            content.appendChild(div2)
        }*/
     }
    3.有个add按纽  如何直接调用方法  我上面写的是先调用一个函数  在调用的方法 
    ----------
    <input  value="add" type="button" onclick="oo.add(document.getElementById('title').value,document.getElementById('content').value)" />你直接在按钮里面使用你创建的对象的方法来添加就好了,不过你的对象名称要和你实际创建的一致,我觉得这个没必要
    4。 
    -------------//说明看第一点
    li.onclick= function(){PackUp.change(this)}5. 不是很明白哪写该做属性  哪写该做方法 真的不明白, 我觉得全部都可以做参数(- - !) 
    ----------------
    数据做属性,实现过程做方法
      

  4.   

    更新下,闭包变量的申明没有发出来:-)
    var PackUp=this;//======================闭包对象for(var i=0;i<num;i++)                                 //循环输出title和content
     {
    //if(i==0)
        //{
            var li = document.createElement("li")
            li.className=i==0?"li2":"li1";//===========================================
            li.onclick= function(){PackUp.change(this)}; //使用闭包变量来调用change,而不是this,因为此时this==li这个元素
      

  5.   

    最好把参数都作为属性,要不你使用prototype来建立方法时,就访问不到参数了,但是可以通过this对象访问到属性
      

  6.   

    在Mozilla Firefox下不出现错位.............
      

  7.   

    如果你只是找一个兼容性比较好的滑动门用的话,推荐你用用这个http://topic.csdn.net/u/20120131/12/3d219e77-57c5-4af4-8d23-7cec2d74a823.html?seed=1312298055&r=77398585#r_77398585
    虽然我这个贴子是在求助,但这个滑动门我一直在用,目前在各大主流浏览器还没有发现问题,你看看是不是你要的那种滑动门,改一下那个JS能节约不少流量,就安照那个回复的大大的改就行了,我用的已经改过了