Hôm nay tôi vừa viết một bài về "Tại sao chúng ta sử dụng các ký tự như" e "trong e.preventDefault ()?" và tôi nghĩ câu trả lời của tôi sẽ có ý nghĩa ...
Đầu tiên, chúng ta hãy xem cú pháp của addEventListener
Thông thường nó sẽ là:
target.addEventListener (type, listening [, useCapture]);
Và định nghĩa các tham số của addEventlistener là:
gõ: Một chuỗi đại diện cho loại sự kiện để lắng nghe.
Listener: Đối tượng nhận thông báo (một đối tượng triển khai giao diện Sự kiện) khi một sự kiện thuộc loại được chỉ định xảy ra. Đây phải là một đối tượng triển khai giao diện EventListener hoặc một hàm JavaScript.
(Từ MDN)
Nhưng tôi nghĩ có một điều cần lưu ý:
Khi bạn sử dụng hàm Javascript làm trình lắng nghe, đối tượng triển khai giao diện Sự kiện (sự kiện đối tượng) sẽ được tự động gán cho "tham số đầu tiên" của hàm. Vì vậy, nếu bạn sử dụng function (e), đối tượng sẽ được gán cho "e" vì "e" là tham số duy nhất của hàm (mặc định là tham số đầu tiên!), sau đó bạn có thể sử dụng e.preventDefault để ngăn chặn điều gì đó ....
chúng ta hãy thử ví dụ dưới đây:
<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 e=3;
var v=5;
var t=e+v;
console.log(t);
e.preventDefault();
}, false);
</script>
kết quả sẽ là: [object MouseEvent] 5 và bạn sẽ ngăn chặn sự kiện nhấp chuột.
nhưng nếu bạn xóa dấu bình luận như:
<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>
bạn sẽ nhận được: 8 và lỗi : "Uncaught TypeError: e.preventDefault không phải là một hàm tại HTMLInputElement. (VM409: 69)".
Chắc chắn, sự kiện nhấp chuột sẽ không bị ngăn chặn lần này vì "e" đã được định nghĩa lại trong hàm.
Tuy nhiên, nếu bạn thay đổi mã thành:
<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>
mọi thứ sẽ hoạt động bình thường trở lại ... bạn sẽ nhận được 8 và sự kiện nhấp chuột bị ngăn chặn ...
Do đó, "e" chỉ là một tham số của hàm của bạn và bạn cần một "e" trong hàm you () để nhận "đối tượng sự kiện" sau đó thực hiện e.preventDefault (). Đây cũng là lý do tại sao bạn có thể thay đổi chữ "e" thành bất kỳ từ nào không được bảo lưu bởi js.