Để buộc cả các câu trả lời rất-đúng với nhau, những gì đang xảy ra là bạn đã inlined một chức năng mà bạn đã viết onclick="return runFunction();"
Nếu bạn nhìn vào đó, những gì nó thực sự làm đang diễn ra như thế này:
var link = document.getElementById("myLink");
link.onclick = function() { runFunction(); };
Xem sự cố?
Hiện tại, số runFunction
của tôi đang được gọi mà không có bất kỳ đối tượng sự kiện nào được chuyển vào. ... có nghĩa là var thisLink = (evt) ?
sẽ trả về false, có nghĩa là nó sẽ cố gắng chạy trong chế độ oldIE.
Bằng cách viết onclick="runFunction"
, đó là giống như nói:
link.onclick = runFunction;
Có nghĩa là khi sự kiện onclick xảy ra, runFunction sẽ được gọi, và trong các trình duyệt W3C tuân thủ, nó sẽ được gửi một đối tượng sự kiện.
Đó là lý do giải pháp đó hoạt động.
Cách tốt nhất để tránh nhiều nhầm lẫn này là xử lý JavaScript từ bên trong JavaScript và để xử lý HTML bên trong HTML, để bạn không phải lo lắng về cách chuỗi dịch thành mã.
Bây giờ, để có được tất cả điều này để làm việc, và ngăn chặn chuyển hướng, bạn muốn làm điều này:
cho các trình duyệt W3C (những cái mà vượt qua các tham số sự kiện):
function runFunction (evt) {
// stops the default-action from happening
// means you need to find another way to fire it, if you want to later
evt.preventDefault();
// stops higher-up elements from hearing about the event
// like if you stop a submit button from "clicking", that doesn't stop the form
// from submitting
evt.stopPropagation();
//the oldIE versions of both of these are
event.cancelBubble = true;
event.returnValue = false;
}
Điều đó có nghĩa không có sự kiện được truyền cho hàm. Thanx. – Vicky