2012-11-28 33 views
24

Tôi có bảng HTML như được đưa ra trong mã sau. Điều này có 16 cột. Tôi đang thiết lập chiều rộng ô bằng javascript. Khi tổng chiều rộng nhỏ hơn 100%, nó hoạt động tốt.Các ô bảng bị ẩn khi tổng chiều rộng lớn hơn 100%

Khi tổng chiều rộng vượt quá 100%, tôi muốn hiển thị horizontal scroll bar. Nhưng khi tôi thay đổi chiều rộng của ô được đánh dấu màu vàng từ 5% đến 30%, tất cả các ô còn lại sẽ bị ẩn thay vì xuất hiện của thanh cuộn.

CÂU HỎI:

  1. Tại sao các thanh cuộn không xuất hiện hiện nay?
  2. Làm cách nào chúng ta có thể làm cho nó hoạt động phù hợp bằng cách hiển thị scroll bar? (Ngoài ra hai cột sau cột vàng nên visible; không ẩn)

Lưu ý: Vấn đề cần lưu ý trong IE8.

Lưu ý: Tham khảo http://jsfiddle.net/Lijo/dYSfN/2/ để biết mã. Điều này không hiển thị vấn đề. Đối với hình dung vấn đề, hãy sao chép mã vào một file html và mở sử dụng IE8

CẬP NHẬT

Trong khi hiding a column, cột còn lại rộng tự động điều chỉnh chiều rộng bảng trong Firefox và Chrome nhưng không phải trong IE8. Trong IE8 chiều rộng bảng shrinks.

http://srikanthgade.blogspot.in/2010/09/ie8-standards-table-layout-fixed.html#!/2010/09/ie8-standards-table-layout-fixed.html

Issue Chi tiết

Khi Vàng Tóc Highlight di Width là 5%

enter image description here

Khi Vàng Tóc Highlight di Width là 30%

enter image description here

STYLE

.gridTableBorder 
    { 
     overflow:scroll; 
     border: 2px solid green; 
    } 

    /*GridView Tables*/ 
    .resultGridTable 
    { 
     table-layout: fixed; /*Needed along with word wrap */ 
    } 

    .resultGridTable th 
    { 
     background-color: #A7A7A6; 
     color: #ffffff; 
     padding: 2px 5px 2px 5px; 
     font: bold 9pt Arial; 
     border: 1px solid red; 
     word-wrap: break-word; 
    } 

    .resultGridTable td 
    { 
     padding: 0px 5px 0px 5px; 
     font: normal 9pt Arial; 
     word-wrap: break-word; 
     border: 1px solid blue; 
    } 

JAVASCRIPT

$(document).ready(function() { 


     //Width Setting 
     var numberOfColumns = 16; 
     $('.resultGridTable th, .resultGridTable td').each(function (i) { 


      if (i % numberOfColumns == 0) { 
       $(this).css('width', '1%'); 
      } 

      if (i % numberOfColumns == 1) { 
       $(this).css('width', '10%'); 
      } 

      if (i % numberOfColumns == 2) { 
       $(this).css('width', '9%'); 

      } 

      if (i % numberOfColumns == 3) { 
       $(this).css('width', '8%'); 
       $(this).css('background-color', 'orange'); 
      } 

      if (i % numberOfColumns == 4) { 
       $(this).css('width', '6%'); 
      } 
      if (i % numberOfColumns == 5) { 
       $(this).css('width', '8%'); 
      } 
      if (i % numberOfColumns == 6) { 
       $(this).css('width', '5%'); 
      } 
      if (i % numberOfColumns == 7) { 
       $(this).css('width', '5%'); 
      } 
      if (i % numberOfColumns == 8) { 
       $(this).css('width', '5%'); 
      } 

      /// 
      if (i % numberOfColumns == 9) { 
       $(this).css('width', '7%'); 
      } 
      if (i % numberOfColumns == 10) { 
       $(this).css('width', '8%'); 
       $(this).css('background-color', 'orange'); 
      } 

      if (i % numberOfColumns == 11) { 
       $(this).css('width', '5%'); 
      } 
      if (i % numberOfColumns == 12) { 
       $(this).css('width', '5%'); 
      } 

      if (i % numberOfColumns == 13) { 
       $(this).css('width', '30%'); 
       $(this).css('background-color', 'Yellow'); 
      } 

      if (i % numberOfColumns == 14) { 
       $(this).css('width', '7%'); 
      } 

      if (i % numberOfColumns == 15) { 
       $(this).css('width', '7%'); 
      } 

     } 
     ); 


     //Hide Is Summary Row Column 
     var selectedElements = $("tr").find("th:first, td:first"); 
     $(selectedElements).hide(); 


    } 
    ); 

HTML

<body> 
<form method="post" action="LocalTaxReport.aspx" id="form1"> 
<div id="wrapper"> 
    <div id="container"> 
     <div id="centralContainer"> 
      <div id="mainContainer"> 
       <div id="contentHolderDiv" class="contentHolderDiv"> 
        <div id="resultContainer" class="resultContainerDiv"> 
         <div id="gridDiv" class="gridTableBorder"> 
          <div> 
           <table class="resultGridTable" cellspacing="0" id="detailContentPlaceholder_grdLocalTaxReport" 
            style="border-collapse: collapse;"> 
            <tr> 
             <th scope="col"> 
              IsSummaryRow 
             </th> 
             <th scope="col"> 
              Associate 
             </th> 
             <th scope="col"> 
              My Amount 
             </th> 
             <th scope="col"> 
              Federal Withholding 
             </th> 
             <th scope="col"> 
              Social Security 
             </th> 
             <th scope="col"> 
              Medicaring 
             </th> 
             <th scope="col"> 
              State Tax 
             </th> 
             <th scope="col"> 
              County Tax 
             </th> 
             <th scope="col"> 
              City Tax 
             </th> 
             <th scope="col"> 
              Total 
             </th> 
             <th scope="col"> 
              State 
             </th> 
             <th scope="col"> 
              State Code 
             </th> 
             <th scope="col"> 
              County 
             </th> 
             <th scope="col"> 
              County Code 
             </th> 
             <th scope="col"> 
              City 
             </th> 
             <th scope="col"> 
              City Code 
             </th> 
            </tr> 
            <tr> 
             <td> 
              False 
             </td> 
             <td> 
              Mary Dryden 
             </td> 
             <td> 
              $3450 
             </td> 
             <td> 
              $32 
             </td> 
             <td> 
              $5 
             </td> 
             <td> 
              $2 
             </td> 
             <td> 
              $10 
             </td> 
             <td> 
              $1 
             </td> 
             <td> 
              $2 
             </td> 
             <td> 
              $3400 
             </td> 
             <td> 
              Arkansas 
             </td> 
             <td> 
              AR 
             </td> 
             <td> 
              Benton 
             </td> 
             <td> 
              04567 
             </td> 
             <td> 
              Bentonville 
             </td> 
             <td> 
              23156 
             </td> 
            </tr> 
           </table> 
          </div> 
         </div> 
        </div> 
        <div class="clear"> 
        </div> 
       </div> 
      </div> 
      <div class="clear"> 
      </div> 
     </div> 
    </div> 
</div> 
</form> 

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.4.1.js"></script> 

</body> 
+0

Bạn có CSS ​​nào khác ảnh hưởng đến điều này không được đăng ở đây không? Tôi hỏi, bởi vì tôi không thấy hành vi mà bạn mô tả khi tôi thiết lập mã của bạn và chạy nó trên IE8. CSS cho tất cả các yếu tố bao bọc mà bảng này được chôn trong là gì? – ScottS

+0

@ScottS Tôi không có bất kỳ CSS nào khác. Tất cả các mã được đăng ở đây. Từ câu trả lời của Enrico nó có vẻ như nó là tái sản xuất – Lijo

+1

Khi tôi thiết lập một trang và xem trong IE8 ở mức 30%, nó chỉ buộc các điều chỉnh độ rộng ô bảng khác để giữ cho bảng ở độ rộng 100%. Tôi đang xem Windows 7 trong IE9 để hiển thị chế độ trình duyệt IE8. Vì vậy, tôi đoán tôi không thể giúp được gì. – ScottS

Trả lời

18

Tôi đã cố gắng đạt được hiệu quả mong muốn mà bạn có với vài sửa đổi và tôi sẽ mô tả nó ở đây.

  1. Bạn cần đặt doctype. Tuyên bố DOCTYPE là bắt buộc đối với hầu hết các ngôn ngữ đánh dấu hiện tại và không có ngôn ngữ đánh dấu xác thực tài liệu hoặc xác định những quy tắc nào cần áp dụng một cách đáng tin cậy.

  2. Bạn không thấy thanh cuộn vì chiều rộng của bảng không được đặt. Div theo mặc định mất 100%. Bây giờ đặt thuộc tính overflow cho div và sau đó đặt chiều rộng của bảng thành 120% (vượt quá số 100% của div) để xem các thanh cuộn.

  3. Chiều rộng bảng 120% không có nghĩa là bạn có thể tổng tất cả chiều rộng cột thành 120. Kể từ khi table-layout:fixed, bạn cần kiểm đếm tổng chiều rộng cột thành 100 ngay cả khi bạn đặt chiều rộng bảng là 120%.

  4. Trong mã bạn đã đặt chiều rộng của tất cả các cột và hàng, thay vì chỉ áp dụng chiều rộng cho th hoặc hàng đầu tiên sẽ áp dụng cho tất cả các cột trong tất cả các hàng (toàn bộ bảng).

  5. Modified mã của bạn từ việc sử dụng if..if..if sử dụng if..else if..else if

Lưu ý: 4 và 5 là cải tiến từ mã hiện tại.

DEMO:http://jsfiddle.net/FP7MF/2/embedded/result/

Full Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1"> 
    <title>My Report </title> 
    <style type="text/css"> 

     /*GridView Tables*/ 
     .resultGridTable 
     { 
      table-layout: fixed; 
      width: 130%; 
     } 

     .resultGridTable th 
     { 
      background-color: #A7A7A6; 
      color: #ffffff; 
      padding: 2px 5px 2px 5px; 
      font: bold 9pt Arial; 
      border: 1px solid red; 
      word-wrap: break-word; 
     } 

     .resultGridTable td 
     { 
      padding: 0px 5px 0px 5px; 
      font: normal 9pt Arial; 
      word-wrap: break-word; 
      border: 1px solid blue; 
     } 

     #gridDiv div { overflow: auto; } 

    </style> 
</head> 
<body> 
    <form> 
     <div id="wrapper"> 
      <div id="container"> 
       <div id="centralContainer"> 
        <div id="mainContainer"> 
         <div id="contentHolderDiv" class="contentHolderDiv"> 
          <div id="resultContainer" class="resultContainerDiv"> 
           <div id="gridDiv" class="gridTableBorder"> 
            <div> 
             <table class="resultGridTable" cellspacing="0" id="detailContentPlaceholder_grdLocalTaxReport" 
              style="border-collapse: collapse;"> 
              <tr> 
               <th scope="col">IsSummaryRow</th> 
               <th scope="col">Associate</th> 
               <th scope="col">My Amount</th> 
               <th scope="col">Federal Withholding</th> 
               <th scope="col">Social Security</th> 
               <th scope="col">Medicaring</th> 
               <th scope="col">State Tax</th> 
               <th scope="col">County Tax</th> 
               <th scope="col">City Tax</th> 
               <th scope="col">Total</th> 
               <th scope="col">State</th> 
               <th scope="col">State Code</th> 
               <th scope="col">County</th> 
               <th scope="col">County Code</th> 
               <th scope="col">City</th> 
               <th scope="col">City Code</th> 
              </tr> 
              <tr> 
               <td>False</td> 
               <td>Mary Dryden</td> 
               <td>$3450</td> 
               <td>$32</td> 
               <td>$5</td> 
               <td>$2</td> 
               <td>$10</td> 
               <td>$1</td> 
               <td>$2</td> 
               <td>$3400</td> 
               <td>Arkansas</td> 
               <td>AR</td> 
               <td>Benton</td> 
               <td>04567</td> 
               <td>Bentonville</td> 
               <td>23156</td> 
              </tr> 
             </table> 
            </div> 
           </div> 
          </div> 
          <div class="clear"></div> 
         </div> 
        </div> 
        <div class="clear"></div> 
       </div> 
      </div> 
     </div> 
    </form> 
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.4.1.js"></script> 

    <script type="text/javascript"> 


     $(document).ready(function() { 


      //Width Setting 
      var numberOfColumns = 16; 
      $('.resultGridTable th').each(function (i) { 

       if (i % numberOfColumns == 0) { 
        $(this).css('width', '1%'); 
       } else if (i % numberOfColumns == 1) { 
        $(this).css('width', '10%'); 
       } else if (i % numberOfColumns == 2) { 
        $(this).css('width', '9%'); 
       } else if (i % numberOfColumns == 3) { 
        $(this).css({'width': '8%', 'background-color': 'orange'}); 
       } else if (i % numberOfColumns == 4) { 
        $(this).css('width', '6%'); 
       } else if (i % numberOfColumns == 5) { 
        $(this).css('width', '8%'); 
       } else if (i % numberOfColumns == 6) { 
        $(this).css('width', '5%'); 
       } else if (i % numberOfColumns == 7) { 
        $(this).css('width', '5%'); 
       } else if (i % numberOfColumns == 8) { 
        $(this).css('width', '5%'); 
       } else if (i % numberOfColumns == 9) { 
        $(this).css('width', '7%'); 
       } else if (i % numberOfColumns == 10) { 
        $(this).css({'width': '8%', 'background-color': 'orange'}); 
       } else if (i % numberOfColumns == 11) { 
        $(this).css('width', '5%'); 
       } else if (i % numberOfColumns == 12) { 
        $(this).css('width', '5%'); 
       } else if (i % numberOfColumns == 13) { 
        $(this).css({'width': '8%', 'background-color': 'Yellow'}); 
       } else if (i % numberOfColumns == 14) { 
        $(this).css('width', '5%'); 
       } else if (i % numberOfColumns == 15) { 
        $(this).css('width', '5%'); 
       } 

      }); 

      //Hide Is Summary Row Column 
      var selectedElements = $("tr").find("th:first, td:first"); 
      $(selectedElements).hide(); 
     }); 

    </script> 
</body> 
</html> 
+0

Khi tôi thực hiện chiều rộng của cột màu vàng là 30%, các cột sau cột màu vàng không được hiển thị đúng cách. Làm thế nào chúng ta có thể khắc phục điều đó? – Lijo

+3

Bạn đã đọc mục thứ 3 nói về tổng chiều rộng của cột không vượt quá '100' .. Nó sẽ hoạt động nếu bạn kiểm tra nó đến' 100% '. –

+0

Tôi không nghĩ đó là lý do. Nó hoạt động tốt trong Chrome và Firefox ngay cả với 30%. Bất kỳ lý do nào đằng sau điều đó? – Lijo

1

tha thứ cho tôi nếu tôi sai, nhưng không thể này được giải quyết bằng cách thêm overflow:scroll; như một quy tắc css cho div có chứa bảng?

+0

Nó không hoạt động. Tôi đã thử .gridTableBorder {overflow: scroll; đường viền: màu xanh lá cây 2px; } – Lijo

2

Đây không phải là giải pháp hoàn hảo, nhưng thiết lập chiều rộng bảng thành 120% và thay đổi chiều rộng cột thành phần trăm chiều rộng bảng (để tổng hợp lên đến 100%) đạt được hiệu quả mong muốn.

+0

Bạn có thể giải thích tại sao thanh cuộn không xuất hiện khi chiều rộng là 100%? – Lijo

+1

Chưa, nhưng tôi sẽ cập nhật câu trả lời nếu tôi tìm ra. – Enrico

1

Nếu chúng ta cần phải giữ cho bàn bố trí như cố định trong IE8, sau đó bên dưới workaround cần phải được thêm vào sau khi lẩn trốn các cột :

: 
: 
$(selectedElements).hide(); 

// Add the workaround after the above line (or when hiding of columns is done). 
$(".resultGridTable").attr("style","display:inline-table;"); 
window.setTimeout(function(){$(".resultGridTable").attr("style","");},0); 

Đây là lỗi trong IE8, nhưng có vẻ như Microsoft chưa phản hồi về bất kỳ giải pháp nào. Nếu bạn tìm thấy bất kỳ thông tin, xin vui lòng gửi nó ở đây.

Nhưng tôi đã thử giải pháp thay thế, nhưng nó vẫn không đưa ra kết quả mong muốn.

Chỉ cần thêm nó ở đây, do đó nó có thể giúp đỡ trong một số R hơn & D.

Tài liệu tham khảo:

http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/f265c5b1-a45d-4949-85b2-86a97a884dc1/

Cách giải quyết:

IE8 isn't resizing tbody or thead when a column is hidden in a table with table-layout:fixed

http://srikanthgade.blogspot.in/2010/09/ie8-standards-table-layout-fixed.html

+0

Hãy thử IE8 trong IE8 :-) Vui lòng tham khảo bình luận @ScottS trong câu hỏi – Lijo

+0

Tôi đã cập nhật bài đăng. Hãy cho tôi biết liệu nó có giải quyết được vấn đề của bạn hay không. – Rups

+1

Điều đó sẽ không giúp ích gì. Tôi cần bố cục bảng để sửa. Vui lòng giải thích lý do tại sao nó hoạt động trong Chrome và Firefox với bố cục bảng (với một số tham chiếu để chứng minh) – Lijo

1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<style type="text/css"> 
.gridTableBorder 
    { 
     overflow:scroll; 
     border: 2px solid green; 
    } 

    /*GridView Tables*/ 
    .resultGridTable 
    { 
     /*table-layout: fixed;*/ /*Needed along with word wrap */ 
    } 

    .resultGridTable th 
    { 
     background-color: #A7A7A6; 
     color: #ffffff; 
     padding: 2px 5px 2px 5px; 
     font: bold 9pt Arial; 
     border: 1px solid red; 
     /*word-wrap: break-word;*/ 
    } 

    .resultGridTable td 
    { 
     padding: 0px 5px 0px 5px; 
     font: normal 9pt Arial; 
     /*word-wrap: break-word;*/ 
     border: 1px solid blue; 
    } 
</style> 
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.4.1.js"></script> 
<script type="text/javascript"> 

$(document).ready(function() { 


     //Width Setting 
     var numberOfColumns = 16; 
     $('.resultGridTable th, .resultGridTable td').each(function (i) { 


      if (i % numberOfColumns == 0) { 
       $(this).css('width', '1%'); 
      } 

      if (i % numberOfColumns == 1) { 
       $(this).css('width', '10%'); 
      } 

      if (i % numberOfColumns == 2) { 
       $(this).css('width', '9%'); 

      } 

      if (i % numberOfColumns == 3) { 
       $(this).css('width', '8%'); 
       $(this).css('background-color', 'orange'); 
      } 

      if (i % numberOfColumns == 4) { 
       $(this).css('width', '6%'); 
      } 
      if (i % numberOfColumns == 5) { 
       $(this).css('width', '8%'); 
      } 
      if (i % numberOfColumns == 6) { 
       $(this).css('width', '5%'); 
      } 
      if (i % numberOfColumns == 7) { 
       $(this).css('width', '5%'); 
      } 
      if (i % numberOfColumns == 8) { 
       $(this).css('width', '5%'); 
      } 

      /// 
      if (i % numberOfColumns == 9) { 
       $(this).css('width', '7%'); 
      } 
      if (i % numberOfColumns == 10) { 
       $(this).css('width', '8%'); 
       $(this).css('background-color', 'orange'); 
      } 

      if (i % numberOfColumns == 11) { 
       $(this).css('width', '5%'); 
      } 
      if (i % numberOfColumns == 12) { 
       $(this).css('width', '5%'); 
      } 

      if (i % numberOfColumns == 13) { 
       $(this).css('width', '30%'); 
       $(this).css('background-color', 'Yellow'); 
      } 

      if (i % numberOfColumns == 14) { 
       $(this).css('width', '7%'); 
      } 

      if (i % numberOfColumns == 15) { 
       $(this).css('width', '7%'); 
      } 

     } 
     ); 


     //Hide Is Summary Row Column 
     var selectedElements = $("tr").find("th:first, td:first"); 
     $(selectedElements).hide(); 


    } 
    ); 
</script> 
</head> 

<body> 

<form method="post" action="LocalTaxReport.aspx" id="form1"> 
<div id="wrapper"> 
    <div id="container"> 
     <div id="centralContainer"> 
      <div id="mainContainer"> 
       <div id="contentHolderDiv" class="contentHolderDiv"> 
        <div id="resultContainer" class="resultContainerDiv"> 
         <div id="gridDiv" class="gridTableBorder"> 
          <div> 
           <table class="resultGridTable" cellspacing="1" id="detailContentPlaceholder_grdLocalTaxReport" style="border-collapse: collapse;"> 
            <tr> 
             <th scope="col"> 
              IsSummaryRow 
             </th> 
             <th scope="col"> 
              Associate 
             </th> 
             <th scope="col"> 
              My Amount 
             </th> 
             <th scope="col"> 
              Federal Withholding 
             </th> 
             <th scope="col"> 
              Social Security 
             </th> 
             <th scope="col"> 
              Medicaring 
             </th> 
             <th scope="col"> 
              State Tax 
             </th> 
             <th scope="col"> 
              County Tax 
             </th> 
             <th scope="col"> 
              City Tax 
             </th> 
             <th scope="col"> 
              Total 
             </th> 
             <th scope="col"> 
              State 
             </th> 
             <th scope="col"> 
              State Code 
             </th> 
             <th scope="col"> 
              County 
             </th> 
             <th scope="col"> 
              County Code 
             </th> 
             <th scope="col"> 
              City 
             </th> 
             <th scope="col"> 
              City Code 
             </th> 
            </tr> 
            <tr> 
             <td> 
              False 
             </td> 
             <td> 
              Mary Dryden 
             </td> 
             <td> 
              $3450 
             </td> 
             <td> 
              $32 
             </td> 
             <td> 
              $5 
             </td> 
             <td> 
              $2 
             </td> 
             <td> 
              $10 
             </td> 
             <td> 
              $1 
             </td> 
             <td> 
              $2 
             </td> 
             <td> 
              $3400 
             </td> 
             <td> 
              Arkansas 
             </td> 
             <td> 
              AR 
             </td> 
             <td> 
              Benton 
             </td> 
             <td> 
              04567 
             </td> 
             <td> 
              Bentonville 
             </td> 
             <td> 
              23156 
             </td> 
            </tr> 
           </table> 
          </div> 
         </div> 
        </div> 
        <div class="clear"> 
        </div> 
       </div> 
      </div> 
      <div class="clear"> 
      </div> 
     </div> 
    </div> 
</div> 
</form> 

</body> 
</html> 

Tôi vừa xem xét vấn đề của bạn, tôi đã thực hiện một số R & D trên mã và css của bạn.Tôi vừa xóa bảng bố cục: cố định và bọc từ: ngắt từ;

Điều gì đã gây ra sự cố trong IE8 cũng như trong IE7. Trong ảnh chụp màn hình của bạn, trong đó chiều cao ô được tăng lên do từ bọc: từ ngắt.

Trong các trình duyệt khác, nó hoạt động tốt. Chỉ cần sao chép mã và kiểm tra trong trình duyệt của bạn. Nếu nhu cầu của bạn là hoàn thành mà không sử dụng bảng bố trí: tài sản css cố định và từ bọc hơn là giải pháp của bạn.

@Lijo nếu tôi thiếu điều gì đó, vui lòng cho tôi biết.

+0

Tôi không thể bỏ qua bố cục bảng: cố định và bọc từ: từ ngắt; – Lijo

Các vấn đề liên quan