เมื่อ IE คืนค่า offsetWidth ของ table เป็น 0

ปัญหานี้ไม่เกิดขึ้นบน Browser อื่นเช่น FireFox หรือ Opera ครับ มันเกิดขึ้นกับ IE อย่างเดียว ลองดูตัวอย่างโค้ดเจ้าปัญหา

<style type="text/css">
#table-main {
  width:100px;
}
</style>

<body>
  <table id="table-main">
    <tr><td><img src="xx.jpg" width="200" height="200" alt="" /></td></tr>
  </table>
</body>
<script type="text/javascript">
  alert( document.getElementById( 'table-main' ).offsetWidth );
</script>


ในกรณีนี้มีปัญหาที่อาจเกิดขึ้นได้ 2 กรณี คือ
1. อ่านค่า offsetWidth ของ table แล้วคืนค่าเป็น 0
2. อ่านค่า offsetWidth ของ table แล้วคืนค่าเป็น ความกว้างของ รูป เนื่องจากมีรูปอยู่ภายใน แล้วรูปมีขนาดใหญ่กว่าที่กำหนด ทำให้ตารางขยายขนาดออก เลยคืนค่าความกว้างเป็นค่าใหม่ของรูป

ทั้ง 2 กรณี หากจำเป็นต้องนำความกว้างของตารางไปคำนวณ เช่น การคำนวณ เพื่อปรับขนาดรูปให้กลับมามีขนาดตามที่กำหนดโดยตาราง บน IE ก็จะทำไม่ได้ เนื่องจากค่าที่ถูกต้องที่ต้องการคือ 100px แต่ค่าที่คืนกลับมาไม่ได้เป็นดังที่ต้องการ

การแก้ปัญหานี้ สามารถทำได้ง่ายๆ โดยการสร้างตารางใส่ลงใน div ครับ แล้วกำหนดค่าคงที่ ที่ div แทน และไปอ่านค่าที่ div แทน table

<style type="text/css">
#table-warper {
  width:100px;
}

#table-main {
  width:100%;
}
</style>

<body>
  <div id="table-warper">
    <table id="table-main">
      <tr><td><img src="xx.jpg" width="200" height="200" alt="" /></td></tr>
    </table>
  </div>
</body>
<script type="text/javascript">
  alert( document.getElementById( 'table-warper' ).offsetWidth );
</script>

ผู้เขียน goragod โพสต์เมื่อ 02 ส.ค. 2551 เปิดดู 7,249 ป้ายกำกับ XHTMLCSSJavascript
^