เนื้อหาตอนที่ 7 นี้ จะศึกษาเกี่ยวกับการใช้งาน ตารางใน jQuery Mobile
โดยเริ่มที่
รู้จักกับ Column toggle
Column toggle เป็นการกำหนด ให้เราสามารถที่จะเลือกแสดง หรือไม่แสดง คอลัมน์
ในตารางได้ รวมทั้งยังสามารถแสดง popup เลือกซ่อน หรือแสดง คอลัมน์ ในตารางได้
เริ่ม การสร้างตาราง และการใช้งาน ทดสอบจากเริ่มต้น
เราจะสร้าง ตาราง 5 คอลัมน์ 10 แถว โดยใช้ php
สมมติเป็นรายการสินค้า หัวข้อมี ลำดับ ชื่อ วันที่ ราคา และ จำนวน
ตัวอย่าง
โค้ด
<!DOCTYPE html> <html> <head> <title>ใส่ไตเติล ตามใจชอบ</title> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="js/mobile/1.4.2/jquery.mobile-1.4.2.min.css" /> <script src="js/jquery-1.9.1.min.js"></script> <script src="js/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script> </head> <body> <!-- Start of page HOME --> <div data-role="page" id="page_home"> <div data-role="header" data-position="fixed"> <a href="#left_panel" class="ui-btn ui-shadow ui-corner-all ui-icon-bars ui-btn-icon-notext">Bars</a> <h1>Home</h1> <div data-role="navbar" > <ul> <li><a href="#" class="ui-btn-active" data-icon="heart">เมนู 1</a></li> <li><a href="#" data-icon="calendar">เมนู 2</a></li> <li><a href="#" data-icon="audio">เมนู 3</a></li> <li><a href="#" data-icon="alert">เมนู 4</a></li> <li><a href="#" data-icon="gear">เมนู 5</a></li> </ul> </div><!-- /navbar --> </div><!-- /header --> <div data-role="content"> <table> <thead> <tr> <th># </th> <th>ชื่อ</th> <th>ราคา</th> <th>ราคา</th> <th>จำนวน</th> </tr> </thead> <tbody> <?php for($i=1;$i<=10;$i++){ ?> <tr> <td><?=$i?></td> <td>สินค้ารายการที่ <?=$i?></td> <td><?=date("d-m-Y")?> บาท </td> <td><?=$i*100?> บาท </td> <td><?=$i?> รายการ</td> </tr> <?php } ?> </tbody> </table> </div><!-- /content --> <div data-role="panel" id="left_panel" data-display="push"> <ul data-role="listview" data-icon="false" data-divider-theme="a"> <li data-role="list-divider">หัวข้อแบ่ง</li> <li><a href="#">เมนูที่ 1</a></li> <li><a href="#">เมนูที่ 2</a></li> <li><a href="#">เมนูที่ 3</a></li> <li><a href="#">เมนูที่ 4</a></li> <li data-role="list-divider">หัวข้อแบ่ง</li> <li><a href="#">เมนูที่ 6</a></li> <li><a href="#">เมนูที่ 7</a></li> </ul> </div><!-- /panel --> <div data-role="footer" data-position="fixed"> <h4>ส่วน footer ใส่ตามใจชอบ</h4> </div><!-- /footer --> </div><!-- /page --> </body> </html>
จากโค้ดตาราง ด้านบน เราจะเพิ่มคุณสมบัติ column chooser ให้กับตาราง
โดยต้องกำหนด attributes 2 ค่า ได้แก่
data-role="table" และ data-mode="columntoggle"
นอกจากนั้น เราควรกำหนด id ของ ตาราง เพื่อให้สัมพันธ์กับการใช้งาน
ในการสร้าง popup เลือกแสดงคอลัมน์
ก็จะได้เป็น
<table data-role="table" data-mode="columntoggle" id="my_table" >
ส่วนของ การซ่อน หรือแสดง คอลัมน์
ปกติ ถ้าไม่มีการกำหนดค่าใดๆ คอลัมน์ทั้งหมด จะแสดงปกติ
หากต้องซ่อนคอลัมน์ใด และให้แสดงใน popup เป็นตัวเลือกซ่อนหรือแสดง แทน ให้กำหนด
data-priority="1" ในส่วนของ th ของหัวข้อคอลัมน์
ตัวเลข 1 คือการกำหนด ความสำคัญในการแสดง ของคอลัมน์นั้น กรณีกำหนดตางเป็นแบบ
responsive หรือยืดหยุ่น ตามขนาดหน้าจอ
โดยมีค่าตั้งแต่ 1 - 6 แสดงถึง ความสำคัญ มากสุด ไป น้อยสุด
ซึ่งกรณีกำหนด ui-responsive จะอธิบายในลำดับต่อๆ ไป
สำหรับคอลัมน์ที่ไม่ได้กำหนด data-priority ก็จะแสดงในตาราง ตลอด และไม่แสดงใน
popup เลือก การซ่อน หรือแสดง คอลัมน์
โค้ด
<thead> <tr> <th># </th> <th>ชื่อ</th> <th data-priority="2">วันที่</th> <th>ราคา</th> <th data-priority="1">จำนวน</th> </tr> </thead>
อธิบาย
คอลัมน์ที่ 1 2 และ 4 จะแสดงในตารางตลอด และไม่แสดงใน popup
คอลัมน์ที่ 3 และ 5 จะไม่แสดง แต่จะแสดงให้เลือก ใน popup
ตัวอย่าง
โค้ด
<!DOCTYPE html> <html> <head> <title>ใส่ไตเติล ตามใจชอบ</title> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="js/mobile/1.4.2/jquery.mobile-1.4.2.min.css" /> <script src="js/jquery-1.9.1.min.js"></script> <script src="js/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script> </head> <body> <!-- Start of page HOME --> <div data-role="page" id="page_home"> <div data-role="header" data-position="fixed"> <a href="#left_panel" class="ui-btn ui-shadow ui-corner-all ui-icon-bars ui-btn-icon-notext">Bars</a> <h1>Home</h1> <div data-role="navbar" > <ul> <li><a href="#" class="ui-btn-active" data-icon="heart">เมนู 1</a></li> <li><a href="#" data-icon="calendar">เมนู 2</a></li> <li><a href="#" data-icon="audio">เมนู 3</a></li> <li><a href="#" data-icon="alert">เมนู 4</a></li> <li><a href="#" data-icon="gear">เมนู 5</a></li> </ul> </div><!-- /navbar --> </div><!-- /header --> <div data-role="content"> <table data-role="table" data-mode="columntoggle" id="my_table" > <thead> <tr> <th># </th> <th>ชื่อ</th> <th data-priority="2">วันที่</th> <th>ราคา</th> <th data-priority="1">จำนวน</th> </tr> </thead> <tbody> <?php for($i=1;$i<=10;$i++){ ?> <tr> <td><?=$i?></td> <td>สินค้ารายการที่ <?=$i?></td> <td><?=date("d-m-Y")?> บาท </td> <td><?=$i*100?> บาท </td> <td><?=$i?> รายการ</td> </tr> <?php } ?> </tbody> </table> </div><!-- /content --> <div data-role="panel" id="left_panel" data-display="push"> <ul data-role="listview" data-icon="false" data-divider-theme="a"> <li data-role="list-divider">หัวข้อแบ่ง</li> <li><a href="#">เมนูที่ 1</a></li> <li><a href="#">เมนูที่ 2</a></li> <li><a href="#">เมนูที่ 3</a></li> <li><a href="#">เมนูที่ 4</a></li> <li data-role="list-divider">หัวข้อแบ่ง</li> <li><a href="#">เมนูที่ 6</a></li> <li><a href="#">เมนูที่ 7</a></li> </ul> </div><!-- /panel --> <div data-role="footer" data-position="fixed"> <h4>ส่วน footer ใส่ตามใจชอบ</h4> </div><!-- /footer --> </div><!-- /page --> </body> </html>
มาดูต่อ ส่วนของการกำหนดตารางแบบ responsive และความสัมพันธ์กับการใช้งาน
data-priority
เราจะกำหนดให้ตารางเป็นแบบ responsive โดยเพิ่มคลาส class="ui-responsive" ในตาราง
จะได้เป็น
<table data-role="table" data-mode="columntoggle" id="my_table" class="ui-responsive">
สำหรับตารางที่กำหนด class="ui-responsive" ถึงแม้จะกำหนด การซ่อน คอลัมน์ด้วย data-priority
แต่หากหน้าจอมีขนาดใหญ่ จำนวนคอลัมน์ก็จะแสดง ข้อมูล ตามความกว้างของหน้าจอ และการกำหนด
ความสำคัญของ data-priority
ตัวอย่าง
โค้ด
<!DOCTYPE html> <html> <head> <title>ใส่ไตเติล ตามใจชอบ</title> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="js/mobile/1.4.2/jquery.mobile-1.4.2.min.css" /> <script src="js/jquery-1.9.1.min.js"></script> <script src="js/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script> </head> <body> <!-- Start of page HOME --> <div data-role="page" id="page_home"> <div data-role="header" data-position="fixed"> <a href="#left_panel" class="ui-btn ui-shadow ui-corner-all ui-icon-bars ui-btn-icon-notext">Bars</a> <h1>Home</h1> <div data-role="navbar" > <ul> <li><a href="#" class="ui-btn-active" data-icon="heart">เมนู 1</a></li> <li><a href="#" data-icon="calendar">เมนู 2</a></li> <li><a href="#" data-icon="audio">เมนู 3</a></li> <li><a href="#" data-icon="alert">เมนู 4</a></li> <li><a href="#" data-icon="gear">เมนู 5</a></li> </ul> </div><!-- /navbar --> </div><!-- /header --> <div data-role="content"> <table data-role="table" data-mode="columntoggle" id="my_table" class="ui-responsive" > <thead> <tr> <th># </th> <th>ชื่อ</th> <th data-priority="2">วันที่</th> <th>ราคา</th> <th data-priority="1">จำนวน</th> </tr> </thead> <tbody> <?php for($i=1;$i<=10;$i++){ ?> <tr> <td><?=$i?></td> <td>สินค้ารายการที่ <?=$i?></td> <td><?=date("d-m-Y")?> บาท </td> <td><?=$i*100?> บาท </td> <td><?=$i?> รายการ</td> </tr> <?php } ?> </tbody> </table> </div><!-- /content --> <div data-role="panel" id="left_panel" data-display="push"> <ul data-role="listview" data-icon="false" data-divider-theme="a"> <li data-role="list-divider">หัวข้อแบ่ง</li> <li><a href="#">เมนูที่ 1</a></li> <li><a href="#">เมนูที่ 2</a></li> <li><a href="#">เมนูที่ 3</a></li> <li><a href="#">เมนูที่ 4</a></li> <li data-role="list-divider">หัวข้อแบ่ง</li> <li><a href="#">เมนูที่ 6</a></li> <li><a href="#">เมนูที่ 7</a></li> </ul> </div><!-- /panel --> <div data-role="footer" data-position="fixed"> <h4>ส่วน footer ใส่ตามใจชอบ</h4> </div><!-- /footer --> </div><!-- /page --> </body> </html>
คำอธิบาย
จะเห็นว่า ตารางมีการกำหนด class="ui-responsive" ซึ่งมีผลต่อคอลัมน์ ที่ 5
จากที่ หากไม่กำหนดเป็น responsive คอลัมน์ ที่ 5 จะไม่แสดงในตาราง แต่แสดงใน popup
แต่เมื่อมีการกำหนดเป็น responsive คอลัมน์ ที่ 5 จะแสดง ตามขนาดของหน้าจอ
ที่ยังพอให้คอลัมน์อีก 1 คอลัมน์แสดงข้อมูลได้
ข้อสงสัยเพิ่มเติม ในเมื่อ คอลัมน์ที่ 3 และ 5 กำหนด data-priority อะไรคือตัวเลือก
ที่จะแสดงหรือไม่แสดง ของ 2 คอลัมน์นี้
ตอบ ตำเลขความสำคัญที่กำหนดเข้าไป 1 มีค่าความสำคัญ มากกว่า 2
ตารางจึงเลือกแสดง คอลัมน์ที่ 5 ที่มีความสำคัญมากว่าก่อน แบบนี้ เป็นต้น
ดูเพิ่มเติมกับการกำหนดในตาราง ตามค่าต่อไปนี้
ส่วนของ class
ui-responsive คลาสสำหรับ กำหนดให้ตารางเป็นเแบบ responsive
table-stripe คลาสสำหรับ กำหนดการสลับสี แถวในตาราง
table-stroke คลาสสำหรับ กำหนดให้มีเส้นค้นระหว่างแถวในตาราง
ui-body-a คลาสสำหรับ กำหนดสี theme ให้ตาราง
ui-shadow คลาสสำหรับกำหนด การแสดงแบบมีเงา
ส่วนของ attributes
data-column-popup-theme="a" กำหนด theme ให้กับ popup เลือกคอลัมน์
data-column-btn-theme="b" กำหนด theme ของ ปุ่ม แสดง popup
data-column-btn-text="แสดงคอลัมน์.." กำหนด ข้อความ ปุ่ม แสดง popup
ตัวอย่าง
โค้ด
<!DOCTYPE html> <html> <head> <title>ใส่ไตเติล ตามใจชอบ</title> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="js/mobile/1.4.2/jquery.mobile-1.4.2.min.css" /> <script src="js/jquery-1.9.1.min.js"></script> <script src="js/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script> </head> <body> <!-- Start of page HOME --> <div data-role="page" id="page_home"> <div data-role="header" data-position="fixed"> <a href="#left_panel" class="ui-btn ui-shadow ui-corner-all ui-icon-bars ui-btn-icon-notext">Bars</a> <h1>Home</h1> <div data-role="navbar" > <ul> <li><a href="#" class="ui-btn-active" data-icon="heart">เมนู 1</a></li> <li><a href="#" data-icon="calendar">เมนู 2</a></li> <li><a href="#" data-icon="audio">เมนู 3</a></li> <li><a href="#" data-icon="alert">เมนู 4</a></li> <li><a href="#" data-icon="gear">เมนู 5</a></li> </ul> </div><!-- /navbar --> </div><!-- /header --> <div data-role="content"> <table data-role="table" data-mode="columntoggle" id="my_table" class="ui-body-a ui-shadow ui-responsive table-stripe " data-column-btn-text="แสดงคอลัมน์.." data-column-popup-theme="a" data-column-btn-theme="b" > <thead> <tr> <th># </th> <th>ชื่อ</th> <th data-priority="2">วันที่</th> <th>ราคา</th> <th data-priority="1">จำนวน</th> </tr> </thead> <tbody> <?php for($i=1;$i<=10;$i++){ ?> <tr> <td><?=$i?></td> <td>สินค้ารายการที่ <?=$i?></td> <td><?=date("d-m-Y")?> บาท </td> <td><?=$i*100?> บาท </td> <td><?=$i?> รายการ</td> </tr> <?php } ?> </tbody> </table> </div><!-- /content --> <div data-role="panel" id="left_panel" data-display="push"> <ul data-role="listview" data-icon="false" data-divider-theme="a"> <li data-role="list-divider">หัวข้อแบ่ง</li> <li><a href="#">เมนูที่ 1</a></li> <li><a href="#">เมนูที่ 2</a></li> <li><a href="#">เมนูที่ 3</a></li> <li><a href="#">เมนูที่ 4</a></li> <li data-role="list-divider">หัวข้อแบ่ง</li> <li><a href="#">เมนูที่ 6</a></li> <li><a href="#">เมนูที่ 7</a></li> </ul> </div><!-- /panel --> <div data-role="footer" data-position="fixed"> <h4>ส่วน footer ใส่ตามใจชอบ</h4> </div><!-- /footer --> </div><!-- /page --> </body> </html>
โปรดติดตามเนื้อหาตอนต่อไป