2012-07-19 18 views
5

To jest mój kod htmlinline javascript onclick wydarzenie

<a href="#" onclick="return clickHandler()">Hit</a> 

To jest mój plik javascript

function clickHandler(evt) { 
    var thisLink = (evt)?evt.target:Window.event.srcElement; 
    alert(thisLink.innerHTML); 
    return false; 
} 

Ale gdy klikam odnośnik trafiony, to przekierowuje.

Odpowiedz

8

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;  
} 
+0

Oznacza to, że żadne zdarzenie jest przekazywane do funkcji. Thanx. – Vicky

0

Kiedy podłączyłem swój kod w chromie, mam to jako błąd w konsoli: Uncaught TypeError: nie można odczytać własności „srcElement” undefined

IF javascript bomby odchodzący podczas przetwarzania, to nigdy nie dostaje szansę na powrót w ogóle, więc przeglądarka ma tendencję do lekceważenia tego, co jest w procedurze obsługi onclick po wyjściu z wyjątku.

Od czasu zbombardowania ... domyślne zachowanie znaczników zakotwiczenia, które ma wysłać Cię do miejsca, do którego mówi href.

Spróbuj zawinąć zawartość funkcji w bloku try/catch i zobaczyć, co się pojawi, jeśli coś takiego cię trapi.

7

trzeba przekazać w przypadku, jeśli chcesz zapobiec Dezinstalacji.

html:

<a href="#" onclick="runFunction(event)">Hit</a> 

scenariusz:

function runFunction (evt) { 
    evt.preventDefault(); 
    evt.stopPropagation(); 
} 
Powiązane problemy