2011-12-03 3 views
1

IE6で正常に実装され、IE8で期待通りに動作しないという要件があります。説明は次のとおりです。 テーブルには垂直および水平スクロールの固定ヘッダーがあります。水平スクロールは多くの列が20ほどあるため必要です。水平スクロールではヘッダーは固定されていませんが、垂直に固定されています。 これは技術的に2つのテーブルを使用して行われ、1番目のテーブルはヘッダーとして機能し、2番目のテーブルはcontentとして機能します。また、TD幅を動的に計算し、JAVASCRIPTを使用して幅を設定します。 テーブル幅はIE8では表示されません。私はCSSの問題としてこれを見つけましたが、エラーがどこに正確に置かれているか分かりません。これを楽しみにしています。固定テーブルヘッダー​​IE8の幅

//Function to set cell width of table containing header and the table containing content in synch. 
function setTableColumnWidth(table1, table2) { 

    for (i = 0; i < 21; i++) { 
     var tablecell1 = document.getElementById(table1).rows[0].cells[i].offsetWidth; 
     var tablecell2 = document.getElementById(table2).rows[0].cells[i].offsetWidth; 
     if (tablecell1 > tablecell2) { 
      document.getElementById(table2).rows[0].cells[i].style.width = tablecell1; 


     } else { 
      document.getElementById(table1).rows[0].cells[i].style.width = tablecell2; 


     } 
     if (i == 20) { 
      var table1col12 = document.getElementById(table1).rows[0].cells[i].offsetWidth; 
      document.getElementById(table1).rows[0].cells[i].style.width = table1col12 + 20; 

     } 

    } 
} 
function checkTable(table1, table2) { 
    if (document.getElementById(table1).rows[0] != null 
      && document.getElementById(table2).rows[0] != null) { 
     setTableColumnWidth(table1, table2); 
    } 
} 

これはJSコードです。しかし、私はこれは問題があるとは思わない。

+1

私は答えはありませんが、私は助言を持っています。 JSなしでIEのレイアウトをハックするべきではありません。JSなしで1〜2%(5000人のうち50-100人)がJSを使用せず、すべてうまく混乱しているからです。 –

+1

いくつかのコードと@ [JsFiddle](http://jsfiddle.net/)の例を楽しみにしています - それはawsomeでしょう:) – Andrej

+2

@Sean、私は同意しません。今日、ほとんどのウェブサイトには、(SOのような)js、Ajax、タブ、ウィジェット、地図アプリケーションなどがどこにでも必要です...そして、javascriptをオフにしている人は何が起こっているかをよく知っているハッカーです。それは人の全体の1%でさえないでしょう、**セッションのちょうど1〜2%です**(これらの人々はよりアクティブであり、ロボットとスクリプトもこれらの統計に含まれています)。 – TMS

答えて

0

仕様によると、CSSの幅は単位を持つことになっています。例えば。 cell.style.width = "443"が正しくない、つまりcell.style.width = "443px"である必要があります。
ピクセル単位で測定している場合は、表のセルのwidth属性を使用できます。それはstyleのないcell.widthです。 (これらの属性は、offsetWidthと同様に、単位のない数字です)

なぜIE6では動作しますが、IE8では動作しないのは、IE8が標準に準拠しているからです。

関連する問題