Aby powiązać oba bardzo-poprawnych odpowiedzi razem, co się stało, jest już inlined funkcję gdzie masz napisane onclick="return runFunction();"
Jeśli spojrzeć na to, co to naprawdę robi się dzieje tak:
var link = document.getElementById("myLink");
link.onclick = function() { runFunction(); };
Zobacz problem?
Moje runFunction
jest wywoływane bez żadnego obiektu zdarzenia przekazanego w ogóle. ... co oznacza, że var thisLink = (evt) ?
zwróci false, co oznacza, że spróbuje uruchomić w trybie oldIE.
Pisząc onclick="runFunction"
, że tak samo jak powiedzenie:
link.onclick = runFunction;
Oznacza to, że gdy zdarzenie onclick dzieje, runFunction zostanie wywołana, a w przeglądarkach W3C zgodny, zostanie on wysłany obiekt zdarzenia.
Dlatego właśnie to rozwiązanie działa.
Najlepszym sposobem na uniknięcie tego zamieszania jest radzenie sobie z JavaScript z poziomu JavaScript i radzenie sobie z HTML wewnątrz HTML, dzięki czemu nie musisz się martwić o to, jak łańcuchy tłumaczą się na kod.
Teraz, żeby dostać to wszystko do pracy i zapobiec przekierowanie, że chcesz to zrobić:
dla przeglądarek W3C (te, które pomyślnie przeszły przez parametr Event):
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;
}
Oznacza to, że żadne zdarzenie jest przekazywane do funkcji. Thanx. – Vicky