วันเสาร์ที่ 20 เมษายน พ.ศ. 2556

มาเล่นกับ Form ครับ (jQuery Form)

รู้สึกว่าตัวเองหายไปนานมาก นานจริงๆ ช่วงนี้อ่าน Android อยู่กับ บวกกับงานมากมายรุมเข้ามา 555

วันนี้เราจะมาพูดถึง Form ซึ่งเป็นสิ่งที่ทุกคนน่าจะรู้กับอยู่แล้ว และเราจะมาดูกันว่า jQuery จะมาช่วยอะไรเราได้บ้างครับ

เริ่มด้วยมาดูการเลือก element ใน Form เราดีกว่าว่าจะทำได้ยังไงบ้าง ซึ่งจะแยกออกเป็นสองอย่างครับ

1.  การเลือกจากประเภท Element
ซึ่งสามารถทำได้โดยใช้ filter ครับ :text , :password , :radio , :checkbox , :submit , :button , :image , :file

เช่นหากเราอยากให้ text field ใน form เราทั้งหมดเปลี่ยนสี background เป็นสีเขียว ทำได้โดย
$('#myForm:text').css('background-color', 'green')

2.  การเลือกจาก State
:enabled กับ :disabled ซึ่งจะดึง element ที่ enabled อยู่หรือ disabled อยู่นั่นเอง

:checked ใช้ในการหา checkbox หรือ radio ที่ถูกเลือกครับ ตัวอย่างครับ$(this).is(':checked')

:selected ใช้ในการเช็ค state ของ element option  ที่ถูกเลือกครับ

ตัวอย่างโค้ดวันนี้ครับ

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
  <select name="garden" multiple="multiple">

    <option>Flowers</option>
    <option selected="selected">Shrubs</option>
    <option>Trees</option>
    <option selected="selected">Bushes</option>

    <option>Grass</option>
    <option>Dirt</option>
  </select>
  <div></div>
<script>
$("select[name='garden']").change(function () {
  var str = "";
  $("select[name='garden'] option:selected").each(function () {
        str += $(this).text() + " ";
      });
  $("div").text(str);
})
.trigger('change');
</script>

</body>
</html>

อธิบายโค้ด
Element Section
  <select name="garden" multiple="multiple">
สร้าง select option ชื่อ garden ครับ

jQuery Event Section
$("select[name='garden']").change(function () {
  var str = "";
  $("select[name='garden'] option:selected").each(function () {
        str += $(this).text() + " ";
      });
  $("div").text(str);
})
.trigger('change');

เมื่อ select option ที่มีชื่อ garden เกิดการเปลี่ยนแปลง ก็จะเข้า .change ซึ่งเป็นการ register onchange function ให้กับ select option ครับ

.each ใช้ในการวนเข้าไปหา element ทั้งหมดที่ jquery เลือกเจอครับ ซึ่งในโค้ดจะทำการดึงเอาค่าที่เลือกมาต่อกันและแสดงใน div ครับ ($("div").text(str);)

สุดท้าย .trigger('change'); เป็นคำสั่งเพื่อให้เกิดการเรียก onchange ตั้งแต่เริ่มการแสดงหน้าจอครับ

------------------------------------------------------------------------------------------
Today Tip
วันนี้ tip มาดู jQuery select แบบเต็มๆ ครับ $("div[id='header']") ซึ่งเป็นการเลือก div ที่มี id เท่ากับ header นั่นเอง

ซึ่งรูปย่อที่ชินตากันจะเป็น $(‘div#header’) ซึ่งรูปแบบเต็มๆ สามารถใช้ได้หลากหลายกว่าครับ เช่น  $("div[name='header_name']") ก็ได้

และอีกตัวอย่าง ใช้กับ fileter ก็ได้นะครับ :radio[name=sex]

ลองใช้ดูครับ


ความรู้จาก jQuery Novice to Ninja Feb 2010 ขอบคุณคร้าบ
และ http://api.jquery.com