Now.js Framework Documentation

Now.js Framework Documentation

Special Elements (อิลิเมนต์พิเศษ)

TH 15 Dec 2025 08:53

Special Elements (อิลิเมนต์พิเศษ)

เอกสารสำหรับ form elements พิเศษ: ColorElementFactory, RangeElementFactory, TagsElementFactory, MaskElementFactory และ TextareaElementFactory

📋 สารบัญ

  1. ภาพรวม
  2. ColorElementFactory
  3. RangeElementFactory
  4. TagsElementFactory
  5. MaskElementFactory
  6. TextareaElementFactory
  7. แนวทางปฏิบัติที่ดี

ภาพรวม

Special elements มอบ UI ที่ปรับปรุงสำหรับ input types เฉพาะที่ต้องการมากกว่าการจัดการ text หรือ number พื้นฐาน

Element data-element คำอธิบาย
ColorElementFactory color Color picker พร้อม palette
RangeElementFactory range Single/dual range slider
TagsElementFactory tags Tags/chips input พร้อม autocomplete
MaskElementFactory mask Input masking (โทรศัพท์, วันที่, ฯลฯ)
TextareaElementFactory textarea Auto-resize textarea

ColorElementFactory

ColorElementFactory สร้าง custom color picker พร้อม predefined palette และ hex input

การใช้งานพื้นฐาน

<input type="color"
       data-element="color"
       name="theme_color"
       value="#007bff">

JavaScript API

const instance = ElementManager.getInstance(colorInput);

// รับสีปัจจุบัน
const color = instance.getColor();  // '#007bff'

// ตั้งค่าสี
instance.setColor('#ff5722');

// เปิด/ปิด picker
instance.open();
instance.close();
instance.toggle();

ฟีเจอร์

  • Color Palette: คลิกสีที่กำหนดไว้
  • Hex Input: พิมพ์ค่า hex กำหนดเอง
  • Preview: แสดงตัวอย่างสีในปุ่ม
  • Copy/Paste: Ctrl+C คัดลอก, Ctrl+V วาง

RangeElementFactory

RangeElementFactory สร้าง range sliders พร้อม UX ที่ดีกว่า native range inputs รองรับ single และ dual range modes

การใช้งานพื้นฐาน

<!-- Single range slider -->
<input type="range"
       data-element="range"
       min="0"
       max="100"
       value="50"
       name="volume">

<!-- Dual range slider (min-max) -->
<input type="range"
       data-element="range"
       min="0"
       max="1000"
       data-value="200-800"
       data-dual="true"
       name="price_range">

HTML Attributes

Attribute ประเภท ค่าเริ่มต้น คำอธิบาย
data-element string - ตั้งค่าเป็น range
min number 0 ค่าขั้นต่ำ
max number 100 ค่าสูงสุด
step number 1 ค่าเพิ่ม/ลด
data-dual boolean false เปิด dual handles
data-show-value boolean true แสดง value label
data-format string - รูปแบบค่า (เช่น {value}%)

JavaScript API

const instance = ElementManager.getInstance(rangeInput);

// รับค่า
const value = instance.getValue();
// Single: 75
// Dual: {min: 2000, max: 8000}

// ตั้งค่า
instance.setValue(80);                       // Single
instance.setValue({min: 1000, max: 5000});   // Dual

// อัพเดท constraints
instance.setMin(10);
instance.setMax(200);

TagsElementFactory

TagsElementFactory แปลง text input เป็น tags/chips input พร้อม visual tags, keyboard navigation และ optional autocomplete

การใช้งานพื้นฐาน

<!-- Simple tags input -->
<input type="text"
       data-element="tags"
       name="keywords"
       placeholder="เพิ่ม tags...">

<!-- Tags พร้อม autocomplete -->
<input type="text"
       data-element="tags"
       data-source="/api/tags"
       name="categories">

HTML Attributes

Attribute ประเภท ค่าเริ่มต้น คำอธิบาย
data-element string - ตั้งค่าเป็น tags
data-source string/array - Autocomplete source
data-separator string , ตัวคั่นสำหรับค่าที่วาง
data-max-tags number null จำนวน tags สูงสุด
data-duplicate boolean false อนุญาต tags ซ้ำ

Keyboard Interaction

ปุ่ม การทำงาน
Enter เพิ่ม text ปัจจุบันเป็น tag
Backspace ลบ tag สุดท้าย (เมื่อ input ว่าง)
/ Navigate autocomplete
Escape ปิด autocomplete

JavaScript API

const instance = ElementManager.getInstance(tagsInput);

// รับ tags ทั้งหมด
const tags = instance.getTags();
// [{key: '1', value: 'JavaScript'}, {key: '2', value: 'Python'}]

// เพิ่ม tag
instance.addTag('3', 'React');

// ลบ tag
instance.removeTag('2');

// ล้างทั้งหมด
instance.clear();

MaskElementFactory

MaskElementFactory ใช้ input masks สำหรับข้อมูลที่มีโครงสร้าง เช่น หมายเลขโทรศัพท์ วันที่ หมายเลขบัตร ฯลฯ

การใช้งานพื้นฐาน

<!-- หมายเลขโทรศัพท์ไทย -->
<input type="tel"
       data-element="tel"
       name="mobile">

<!-- บัตรเครดิต -->
<input type="text"
       data-element="mask"
       data-mask="#### #### #### ####"
       name="card">

<!-- วันที่ -->
<input type="text"
       data-element="mask"
       data-mask="##/##/####"
       name="date">

Mask Pattern Characters

ตัวอักษร รับ
# ตัวเลข (0-9)
A ตัวอักษร (A-Z, a-z)
* ตัวอักษรหรือตัวเลข
อื่นๆ Literal (แสดงตามที่เป็น)

Common Patterns

กรณีใช้งาน Pattern ตัวอย่าง
โทรศัพท์ไทย ###-###-#### 081-234-5678
วันที่ ##/##/#### 31/12/2025
เวลา ##:## 14:30
บัตรเครดิต #### #### #### #### 1234 5678 9012 3456

TextareaElementFactory

TextareaElementFactory ปรับปรุง textarea ด้วยฟังก์ชัน auto-resize

การใช้งานพื้นฐาน

<textarea data-element="textarea"
          name="description"
          rows="3"
          placeholder="กรอกคำอธิบาย..."></textarea>

HTML Attributes

Attribute ประเภท ค่าเริ่มต้น คำอธิบาย
data-element string - ตั้งค่าเป็น textarea
data-auto-resize boolean true เปิด auto-resize
data-min-rows number 3 จำนวนแถวขั้นต่ำ
data-max-rows number 10 จำนวนแถวสูงสุดก่อน scroll
maxlength number - จำกัดตัวอักษร
data-show-counter boolean false แสดงตัวนับตัวอักษร

แนวทางปฏิบัติที่ดี

1. ✅ ใช้ Element ที่เหมาะกับประเภทข้อมูล

<!-- ✅ สี -->
<input data-element="color" name="theme">

<!-- ✅ ช่วงราคา -->
<input data-element="range" data-dual="true" name="budget">

<!-- ✅ หลายหมวดหมู่ -->
<input data-element="tags" name="categories">

<!-- ✅ Input มีโครงสร้าง -->
<input data-element="mask" data-mask="##/##/####" name="date">

2. ✅ กำหนดขอบเขตที่สมเหตุสมผล

<!-- ✅ ดี: จำกัด tags -->
<input data-element="tags" data-max-tags="5" name="keywords">

<!-- ✅ ดี: จำกัด textarea -->
<textarea data-element="textarea" maxlength="1000" data-max-rows="15"></textarea>

3. ✅ ใช้ tel Type สำหรับหมายเลขโทรศัพท์

<!-- ✅ ดี: Keyboard มือถือแสดงตัวเลข -->
<input type="tel"
       data-element="tel"
       name="phone">

4. ✅ ใช้ Dual Range สำหรับ Filters

<!-- ✅ ดี: Price filter พร้อม min-max -->
<input data-element="range"
       data-dual="true"
       min="0"
       max="10000"
       step="100"
       data-format="฿{value}"
       name="price">

เอกสารที่เกี่ยวข้อง