Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> HTML

วิธีระบุให้องค์ประกอบเป็น Read-only ใน HTML

เพื่อตั้งค่าองค์ประกอบเป็นอ่านอย่างเดียว (Read-only) ให้ใช้แอตทริบิวต์ readonly

ตัวอย่าง

ลองรันโค้ดต่อไปนี้เพื่อใช้งานแอตทริบิวต์ readonly:

<!DOCTYPE html>
<html>
  <body>
    <h2>Login</h2>
    <form action="/new.php">
      <input type="text" value="Amit" name="sname" readonly><br>
      <input type="password" name="password"><br><br>
      <input type="submit" value="Submit">
    </form>
  </body>
</html>

readonly vs disabled

คุณสมบัติ readonly disabled
แก้ไขค่าได้ไหม ไม่ได้ ไม่ได้
รับ Focus ได้ไหม ได้ (Tab เข้าไปได้) ไม่ได้ (ข้ามไป)
ส่งค่ากับ Form ส่งได้ ไม่ส่ง
รองรับ Input Types text, search, url, tel, email, password, date, number, etc. ทุกประเภท
รองรับ <textarea> ได้ ได้
รองรับ <select> ไม่ได้ ได้
CSS Selector :read-only, :read-write :disabled, :enabled

ตัวอย่างการใช้งาน

1. แสดง ID/Username ที่ไม่ให้แก้ไข แต่ส่งไป Server

<input type="text" name="user_id" value="USR-12345" readonly>
<input type="text" name="username" value="john_doe" readonly>

2. Textarea Read-only (แสดง Terms & Conditions)

<textarea rows="10" cols="50" readonly>
Terms and Conditions:
1. ...
2. ...
</textarea>

3. Date/Number Read-only

<input type="date" name="created" value="2024-01-15" readonly>
<input type="number" name="price" value="99.99" readonly>

การจัดสไตล์ด้วย CSS

input:read-only, textarea:read-only {
  background-color: #f5f5f5;
  color: #666;
  cursor: not-allowed;
}

input:read-write, textarea:read-write {
  background-color: white;
}

JavaScript Control

const input = document.querySelector('input[name="username"]');

// ตั้งค่า readonly
input.readOnly = true;  // CamelCase ใน JS

// ตรวจสอบ
console.log(input.readOnly); // true/false

// Toggle
function toggleReadOnly() {
  input.readOnly = !input.readOnly;
}

กรณีพิเศษ: Select ไม่มี readonly

<select> ไม่มีแอตทริบิวต์ readonly ต้องใช้วิธีอื่น:

<!-- วิธี 1: disabled + hidden input ส่งค่า -->
<select name="country" disabled>
  <option value="th" selected>Thailand</option>
</select>
<input type="hidden" name="country" value="th">

<!-- วิธี 2: CSS pointer-events (ไม่ปลอดภัย 100%) -->
<select name="country" style="pointer-events: none;">...</select>

<!-- วิธี 3: JS prevent change -->
<select name="country" onchange="this.value=this.defaultValue">...</select>