Khi trình duyệt gọi một hàm như là kết quả của một sự kiện DOM, JavaScript chuyển một đối tượng đến chức năng mà trong đó chứa thông tin về sự kiện. Nhưng nó hoạt động hơi khác một chút so với IE. Để làm việc trong tất cả các trình duyệt, foo()
nên một * Lập luận (tôi sử dụng e
):
function foo(e) {
var sender = (e && e.target) || (window.event && window.event.srcElement);
//sender is the DOM element which was clicked
alert(sender.href); //assumes the clicked element was an <a>
}
Dòng đầu tiên sẽ chỉ định "người gửi" giá trị của phần tử đó có nguồn gốc từ sự kiện này trong tất cả các trình duyệt.
Bây giờ, nếu <a>
của bạn có chứa phần tử con (ví dụ, một hình ảnh) và là một trong những là yếu tố thực tế nhấp, sau đó yếu tố đó sẽ trở thành "người gửi". Nếu đây là một khả năng, bạn cần phải đi lên DOM từ người gửi đến khi bạn tìm thấy đường link của bạn:
function foo(e) {
var sender = (e && e.target) || (window.event && window.event.srcElement);
//sender is the DOM element which was clicked
var myEle = sender;
//find the parent node until we hit the <a>
while(myEle.tagName.toUpperCase() != 'A') {
myEle = myEle.parentNode;
}
//myEle is now the <a>. sender is still the originator.
alert(myEle.href);
}
* Bạn cũng có thể truy cập vào bất kỳ đối số truyền cho hàm, ngay cả khi họ không tuyên bố, bằng cách sử dụng mảng arguments[]
.
Nguồn
2009-05-06 21:53:03
i like shorting trên tirnary đôi khi, bản thân mình ... var người gửi = (window.event && window.event.srcElement) || e.Mục tiêu; – Tracker1
@cresentfresh onclick là ngữ nghĩa sai và cực kỳ không linh hoạt. Xem các kỹ thuật nâng cao tiến bộ. –