jquery.numberpad plugin ที่จะสร้างขึ้นนี้ ใช้เพื่อสำหรับ
ในการกรอกข้อมูลที่เป็นตัวเลข ให้กับ textbox ที่เรากำหด โดยง่าย
แค่เพียงกดเลือกตัวเลขที่ต้องการ ด้วย mouse
เนื้อหานี้ ประยุกต์เพิ่มเติม จากบทความก่อนหน้า
สร้าง number pad แป้นตัวเลข ด้วย css อย่างง่าย
https://www.ninenik.com/content.php?arti_id=475 via @ninenik
การใช้งานไม่ยาก แค่เรียกใช้ไฟล์ plugin (คลิกขวา เลือก save ไฟล์ด้านล่างได้เลย)
การนำไปใช้
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script src="js/jquery.numpad.js"></script> <script type="text/javascript"> $(function(){ // การใช้งาาน $("#data1,#data2,#data3").numpad(); }); </script>
ตัวอย่าง
โค้ดและคำอธิบาย plugin ไฟล์ jquery.numpad.js
// JavaScript Document (function($){ // setbackground คือชื่อของ plugin ที่เราต้องการ ในที่นี้ ใช้ว่า setbackground $.fn.numpad = function( options ) { // กำหนดให้ plugin ของเราสามารถ รับค่าเพิ่มเติมได้ มี options // ส่วนนี้ สำหรับกำหนดค่าเริ่มต้น var defaults={ obj_num_pad:"<ul class=i_num_pad><li>Clr</li><li>,</li><li>.</li><li>_</li><li>Del</li><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>0</li></ul>" // สร้าง object สำหรับเก็บค่า element ปุ่มกด }; // ส่วนสำหรับ เป็นต้วแปร รับค่า options หากมี หรือใช้ค่าเริ่มต้น ถ้ากำหนด var settings = $.extend( {}, defaults, options ); /// คืนค่ากลับ การทำงานของ plugin return this.each(function(j,k) { var str_text=$(this).val(); // กำหนดตัวแปร รับค่าข้อมูลเริ่มต้นของ textbox นั้นๆ var obj_input=$(this); // กำหนดตัวแปร รับค่า objext ของ textbox นั้น $(this).after(settings.obj_num_pad); // เมื่อเรียกใช้ plugin ให้เพิ่ม element ปุ่ม number pad ต่อจาก textbox นั้นๆ $(this).click(function(){ // เมื่อคลิกที่ textbox นั้นๆ $(".i_num_pad").hide(); // ซ่อนแป้นปุ่มกดตัวเลข ที่แสดง(ถ้ามี) $(this).next(".i_num_pad").slideDown("fast"); // แสดง number pad ในตำแหน่งของ textbox นั้นๆ ที่คลิก event.stopPropagation(); // หยุด event การคลิกไว้เฉพาะ textbox ที่กดคลิก เท่านั้น }); $(".i_num_pad:eq("+j+") li").click(function(){ // เมื่อปุ่ม number pad ถูกคลิกเลือก j คือลำดับที่ ถ้ามีหลายอัน $(this).toggleClass("hilight_press"); // hilight หรือเน้น ให้ปุ่มที่ถูกก เด่น เห็นได้ชัด เช่น เปลี่ยนพื้นหลังเป็นสีแดง $(this).animate({opacity: 1}, 100, function() { $(this).toggleClass("hilight_press"); // ยกเลิกการ hilight ใน 100 วินาที }); var char_input=$(this).text();// ค่าของปุ่ม number pad ที่กด เก็ยไว้ในตัวแปร char_input switch(char_input){ // เช็คเงื่อนไข ค่าที่รับเข้ามา case "Clr": str_text=""; // เคลียร์ข้อมูล ให้ str_text เท่ากับ ว่างเปล่า break; case "_": str_text+=" "; // เคลียร์ข้อมูล ให้ str_text เพิ่มข่องว่างเข้าไป break; case "Del": // ลบตัวด้านหลังสุด var str_len=str_text.length; // ดูว่าค่าเดิม มีขนาดกี่ตัวอักขระ if(str_len>0){ // ถ้าไม่ใช่ค่าว่าง หรือมีความยาวของอักขระข้อมูล มากกว่า 0 var end_str=str_len-1; // หาตำแหน่งตัวอักขระ ก่อนตัวสุดท้าย 1 ตัว โดยเอา ความยาวทั้งหมด - 1 str_text=str_text.substr(0,end_str); // เอาเฉพาะข้อความตั้งแต่ต้นจนุถึงตัวหลังสุด ก่อนตัวสุดท้าย }; break; default: str_text+=$(this).text(); //หากเป็นค่าอื่น ให้ค่าข้อความ เพิ่มต่อท้ายปกติ } obj_input.val(str_text); //ให้ textbox นั้น มีค่าตามค่าที่กำหนดข้างต้น event.stopPropagation(); // หยุด event การคลิกไว้เฉพาะ ปุ่ม li ที่เรากำหนด }); }); }; // เมื่อมีการคลิกในส่วนอื่น ก็ให้ปิด number pad ไป $('html').click(function(){ $(".i_num_pad").slideUp("fast"); }); })(jQuery);
ตัวอย่างไฟล์ทดสอบทั้งหมด
<!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> </title> <style type="text/css"> /*ส่วนของ css สามารถ ทำเป็นไฟล์ css แยก ก็ได้*/ .i_num_pad{ position: absolute; list-style: none; margin: 0px; padding: 0px; width: 170px; height: 105px; background-color: #4D4646; padding: 5px; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border: 1px solid #666666; display:none; box-shadow: 0 0.25em 0.25em rgba(0, 0, 0, 0.1); -webkit-box-shadow: inset 2px 2px 5px 0px rgba(0,0,0,0.75); -moz-box-shadow: inset 2px 2px 5px 0px rgba(0,0,0,0.75); box-shadow: inset 2px 2px 5px 0px rgba(0,0,0,0.75); } .i_num_pad li{ position: relative; list-style: none; margin: 2px; padding: 0px; display: block; width: 30px; float: left; text-align: center; height: 30px; line-height: 30px; background-color: #949494; border-radius: 100%; -moz-border-radius: 100%; -webkit-border-radius: 100%; border: 0px solid #000000; font-size:15px; font-weight:bold; cursor:pointer; -webkit-box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.75); -moz-box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.75); box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.75); } /*ส่วน class สำหรับกำหนดปุ่ม ที่ถูกกด ให้ hilight*/ .hilight_press{ background-color: #FF0000 !important; color:#FFFFFF; } </style> </head> <body> <br /> <div style="margin:auto;width:40%;margin-top:20px;"> <form id="form1" name="form1" method="post" action=""> <input type="text" name="data1" id="data1" /> ตัวเลขที่ 1 <br /> <br /><br /> <br /> <input type="text" name="data2" id="data2" /> ตัวเลขที่ 2 <br /> <br /><br /> <br /> <input type="text" name="data3" id="data3" /> ตัวเลขที่ 3 <br /> <br /> </form> <br /> </div> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script src="js/jquery.numpad.js"></script> <script type="text/javascript"> $(function(){ // การใช้งาาน $("#data1,#data2,#data3").numpad(); }); </script> </body> </html>