เหตุการณ์ oncopy จะถูกกระตุ้นเมื่อผู้ใช้คัดลอก (Copy) เนื้อหาขององค์ประกอบ (มักใช้กับ Input, Textarea, หรือ Element ที่มี ContentEditable) ใช้สำหรับ Tracking, ป้องกันการคัดลอก, หรือปรับเปลี่ยนข้อมูลที่คัดลอก
ตัวอย่างการใช้งาน
<!DOCTYPE html>
<html>
<body>
<input type="text" oncopy="display()" value="คัดลอกฉันได้" readonly>
<h2 id="test">ลองคัดลอกข้อความในช่องด้านบน</h2>
<script>
function display() {
document.getElementById("test").innerHTML = "คัดลอกสำเร็จ! ✓";
}
</script>
</body>
</html>
ตัวอย่างขั้นสูง: ปรับเปลี่ยนข้อมูลที่คัดลอก (Clipboard API)
<input type="text" id="coupon" value="DISCOUNT-2024-ABC" readonly>
<p id="msg"></p>
<script>
const input = document.getElementById('coupon');
const msg = document.getElementById('msg');
input.addEventListener('copy', async (e) => {
e.preventDefault(); // ป้องกัน Default Copy
// เพิ่มข้อมูลเพิ่มเติม
const textToCopy = `${input.value}\n\nรหัสนี้ใช้ได้ครั้งเดียว\nหมดอายุ 31 ธ.ค. 2567`;
try {
await navigator.clipboard.writeText(textToCopy);
msg.textContent = 'คัดลอกรหัสพร้อมรายละเอียดแล้ว! ✓';
msg.style.color = 'green';
} catch (err) {
// Fallback: ใช้ execCommand (Deprecated)
msg.textContent = 'คัดลอกเองได้ที่ช่องด้านบน';
}
});
</script>
Clipboard Events สรุป
| เหตุการณ์ | เมื่อไหร่ทำงาน | ใช้สำหรับ |
|---|---|---|
| oncopy | คัดลอก (Ctrl+C, Context Menu) | Tracking, Modify Clipboard Data, Prevent Copy |
| oncut | قص (Ctrl+X) | Tracking, Modify Clipboard Data |
| onpaste | วาง (Ctrl+V) | Sanitize Input, Format Conversion, Tracking |
⚠️ ข้อควรระวัง
- บล็อกการคัดลอก (Prevent Default) ส่งผลต่อ UX แย่ - ควรหลีกเลี่ยง
- Clipboard API ต้องการ HTTPS และ User Gesture
- บาง Browser/OS จำกัดสิทธิ์ Clipboard Access