วันนี้ฉันเพิ่งเขียนโพสต์เกี่ยวกับ "ทำไมเราถึงใช้ตัวอักษรเช่น" e "ใน e.preventDefault ()? และฉันคิดว่าคำตอบของฉันจะสมเหตุสมผล ...
ในตอนแรกให้เราดูไวยากรณ์ของ addEventListener
โดยปกติจะเป็น:
target.addEventListener (type, listener [, useCapture]);
และคำจำกัดความของพารามิเตอร์ของ addEventlistener คือ:
ประเภท: สตริงที่แสดงถึงประเภทเหตุการณ์ที่จะฟัง
ผู้ฟัง: ออบเจ็กต์ที่ได้รับการแจ้งเตือน (อ็อบเจ็กต์ที่ใช้อินเทอร์เฟซเหตุการณ์) เมื่อเกิดเหตุการณ์ประเภทที่ระบุ ต้องเป็นอ็อบเจ็กต์ที่ใช้อินเทอร์เฟซ EventListener หรือฟังก์ชัน JavaScript
(จาก MDN)
แต่ฉันคิดว่ามีสิ่งหนึ่งที่ควรสังเกต:
เมื่อคุณใช้ฟังก์ชัน Javascript เป็นตัวฟังอ็อบเจ็กต์ที่ใช้อินเทอร์เฟซเหตุการณ์ (เหตุการณ์วัตถุ) จะถูกกำหนดให้กับ"พารามิเตอร์แรก"ของฟังก์ชันโดยอัตโนมัติดังนั้นหากคุณใช้ ฟังก์ชัน (e) วัตถุจะถูกกำหนดให้กับ "e" เนื่องจาก "e" เป็นพารามิเตอร์เดียวของฟังก์ชัน (อันแรกแน่นอน!) จากนั้นคุณสามารถใช้ e.preventDefault เพื่อป้องกันบางสิ่ง ....
ให้เราลองดูตัวอย่างด้านล่าง:
<p>Please click on the checkbox control.</p>
<form>
<label for="id-checkbox">Checkbox</label>
<input type="checkbox" id="id-checkbox"/>
</div>
</form>
<script>
document.querySelector("#id-checkbox").addEventListener("click", function(e,v){
var v=5;
var t=e+v;
console.log(t);
e.preventDefault();
}, false);
</script>
ผลลัพธ์จะเป็น: [object MouseEvent] 5และคุณจะป้องกันไม่ให้เกิดเหตุการณ์คลิก
แต่ถ้าคุณลบเครื่องหมายแสดงความคิดเห็นเช่น:
<script>
document.querySelector("#id-checkbox").addEventListener("click", function(e,v){
var e=3;
var v=5;
var t=e+v;
console.log(t);
e.preventDefault();
}, false);
</script>
คุณจะได้รับ: 8และข้อผิดพลาด : "Uncaught TypeError: e.preventDefault ไม่ใช่ฟังก์ชันที่ HTMLInputElement (VM409: 69)"
แน่นอนว่าเหตุการณ์การคลิกจะไม่สามารถป้องกันได้ในครั้งนี้เนื่องจากมีการกำหนด "e" อีกครั้งในฟังก์ชัน
อย่างไรก็ตามหากคุณเปลี่ยนรหัสเป็น:
<script>
document.querySelector("#id-checkbox").addEventListener("click", function(e,v){
var e=3;
var v=5;
var t=e+v;
console.log(t);
event.preventDefault();
}, false);
</script>
ทุกสิ่งจะทำงานได้อย่างถูกต้องอีกครั้ง ... คุณจะได้รับ8 และเหตุการณ์การคลิกจะถูกป้องกัน ...
ดังนั้น "e" เป็นเพียงพารามิเตอร์ของฟังก์ชันของคุณและคุณต้องมี "e" ในฟังก์ชัน you () เพื่อรับ "วัตถุเหตุการณ์" จากนั้นดำเนินการ e.preventDefault () นี่คือเหตุผลที่คุณสามารถเปลี่ยน "e" เป็นคำใด ๆ ที่ js ไม่ได้จองไว้