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

เหตุการณ์ ondblclick: รันสคริปตเมื่อดับเบิลคลิกองค์ประกอบ

เหตุการณ์ ondblclick จะถูกกระตุ้นเมื่อผู้ใช้ดับเบิลคลิก (Double-click) บนองค์ประกอบ HTML เกิดขึ้นหลังจากลำดับ: mousedown → mouseup → click → mousedown → mouseup → click → dblclick

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

<!DOCTYPE html>
<html>
<body>
    <button ondblclick="display()" style="padding: 10px 20px; font-size: 16px;">
        คลิกสองครั้งที่นี่
    </button>
    <p id="msg" style="margin-top: 10px; color: #666;">รอการดับเบิลคลิก...</p>
    <script>
        function display() {
            alert("คุณดับเบิลคลิกปุ่มแล้ว!");
            document.getElementById('msg').textContent = 'ดับเบิลคลิกล่าสุด: ' + new Date().toLocaleTimeString();
        }
    </script>
</body>
</html>

ความแตกต่าง Click vs Double Click

เหตุการณ์ Trigger Use Case
onclick คลิกครั้งเดียว ปุ่ม, ลิงก์, Checkbox, การเลือกทั่วไป
ondblclick ดับเบิลคลิก (2 ครั้งภายใน ~300ms) แก้ไข Inline, เปิดรายละเอียด, Select Word, Zoom

⚠️ ปัญหา Click + Dblclick พร้อมกัน

หากมีทั้ง onclick และ ondblclick บนองค์ประกอบเดียว ทั้งสองจะยิง (Click ยิง 2 ครั้ง, Dblclick 1 ครั้ง) ต้องใช้ Debounce/Timer แยก:

let clickTimer = null;
const btn = document.getElementById('myBtn');

btn.addEventListener('click', (e) => {
    if (clickTimer) {
        clearTimeout(clickTimer);
        clickTimer = null;
        // Double Click Logic
        handleDoubleClick(e);
    } else {
        clickTimer = setTimeout(() => {
            // Single Click Logic
            handleSingleClick(e);
            clickTimer = null;
        }, 300); // รอ 300ms ดูว่ามี Click ครั้งที่ 2 ไหม
    }
});

btn.addEventListener('dblclick', (e) => {
    e.preventDefault(); // ป้องกัน Default (เช่น Text Selection)
});

การใช้งานทั่วไป

  • Inline Editing: ดับเบิลคลิกเพื่อแก้ไขข้อความโดยตรง
  • File Manager: ดับเบิลคลิกเปิดไฟล์/โฟลเดอร์
  • Text Selection: ดับเบิลคลิกเลือกคำ (Default Browser Behavior)
  • Zoom Image: ดับเบิลคลิกซูมเข้า/ออก
  • Table Row: ดับเบิลคลิกดูรายละเอียด