Tôi không hiểu động lực đằng sau window.event hoặc window.event.srcElement. Trong bối cảnh nào người ta nên sử dụng điều này? Chính xác nó đại diện trong DOM là gì?Hiểu được thuộc tính window.event và cách sử dụng nó
Trả lời
function IndentifyMe(){
alert("You clicked on " + window.event.srcElement.tagName);
}
<body onclick = "IndentifyMe()">
Hãy thử mã này, với rất nhiều yếu tố trong thẻ cơ thể, và hãy thử nhấp vào yếu tố khác nhau
Sự kiện là mạch máu của tương tác người dùng. Nếu không có sự kiện, bạn không thể tương tác với trang.
Trình xử lý sự kiện được sử dụng để gọi một số JavaScript khi một hành động nhất định xảy ra. Nếu bạn muốn một số hành vi được kích hoạt khi người dùng di chuyển con trỏ qua phần tử, bạn sử dụng trình xử lý sự kiện onmouseover .
"DOM Scripting: Thiết kế Web với JavaScript và Document Object Model: Second Edition"
Ở đây những gì w3school says về event
đối tượng:
Sự kiện là những hành động có thể được phát hiện bởi JavaScript, và sự kiện đối tượng cung cấp thông tin về sự kiện đã xảy ra.
Đôi khi, chúng tôi muốn thực thi JavaScript khi sự kiện xảy ra, chẳng hạn như khi người dùng nhấp vào nút.
Bạn có thể xử lý các sự kiện sử dụng:
node.onclick = function(e) {
// here you can handle event. e is an object.
// It has some usefull properties like target. e.target refers to node
}
Tuy nhiên Internet Explorer không vượt qua sự kiện để xử lý. Thay vào đó bạn có thể sử dụng đối tượng window.event đang được cập nhật ngay sau khi sự kiện được kích hoạt. Vì vậy, cách crossbrowser để xử lý các sự kiện:
node.onclick = function(e) {
e = e || window.event;
// also there is no e.target property in IE.
// instead IE uses window.event.srcElement
var target = e.target || e.srcElement;
// Now target refers to node. And you can, for example, modify node:
target.style.backgroundColor = '#f00';
}
Không chắc chắn sự khác biệt này đã được thay đổi trong phiên bản trình duyệt mới hơn nhưng về cơ bản, "Trong mô hình truy cập sự kiện của Microsoft có một cửa sổ đặc tính. diễn ra." (Từ tài liệu tham khảo)
Vì vậy, để viết một xử lý sự kiện tương thích trên các trình duyệt bạn cần phải làm điều gì đó như thế này:
function doSomething(e) {
if(!e) {
var e = window.event;
}
var ele = e.target || e.srcElement;
// get the clicked element
// srcElement for IE, target for others
}
element.onclick = doSomething;
Ngoài ra bạn vẽ từ w3schools, đây là câu trả lời hữu ích nhất ở đây. +1. – duri
“_'e.target' đề cập đến' node'_ ”: Điều này là sai. 'this' dùng để chỉ' node' trong khi 'e.target' có thể tham chiếu đến bất kỳ phần tử con nào của' nút' phụ thuộc vào phần tử nào đã được nhấp và liệu bong bóng sự kiện hay không, v.v. – Xufox
Điều đó có đúng với tất cả các phiên bản của IE không ? Tôi nhận ra đây là một câu hỏi cũ, chỉ tò mò ... không thể tìm thấy bất cứ điều gì trên nó – aw04