2012-07-19 11 views
5

onclick Questo è il mio codice htmllinea javascript evento

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

Questo è il mio file JavaScript

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

ma quando clicco il link Hit, che reindirizza.

risposta

8

Per legare entrambe le risposte molto-corrette insieme, quello che è successo è che hai inline una funzione in cui hai scritto onclick="return runFunction();"

Se si guarda a questo, quello che sta facendo veramente sta andando in questo modo:

var link = document.getElementById("myLink"); 

link.onclick = function() { runFunction(); }; 

Vedere il problema?

Il mio runFunction viene chiamato senza alcun oggetto evento inoltrato, a tutti. ... il che significa che var thisLink = (evt) ? restituirà false, il che significa che tenterà di eseguire in modalità oldIE.

Scrivendo onclick="runFunction", che è lo stesso che dire:

link.onclick = runFunction; 

Il che significa che quando l'evento onclick accade, runFunction sarà chiamato, e nei browser W3C-compliant, verrà inviato un oggetto evento.

Ecco perché la soluzione funziona.

Il modo migliore per evitare un sacco di questa confusione è trattare JavaScript all'interno di JavaScript e gestire HTML all'interno di HTML, in modo da non doversi preoccupare di come le stringhe si traducono in codice.

Ora, per ottenere tutto questo per lavorare, e prevenire il reindirizzamento, si vuole fare questo:

per i browser W3C (quelli che passano il parametro dell'evento):

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

Questo significa che nessun caso è passato alla funzione. Grazie. – Vicky

0

Quando ho inserito il codice in Chrome, ho ottenuto questo come l'errore nella console: TypeError Uncaught: Impossibile leggere la proprietà 'srcElement' di indefinito

se le bombe javascript fuori durante l'elaborazione, non diventa mai un possibilità di tornare affatto così il browser tende a ignorare ciò che è nel gestore onclick dopo l'eccezione.

Da quando ha bombardato ... il comportamento predefinito dei tag di ancoraggio, che è quello di inviarti ovunque si trovi l'href.

Provare a racchiudere il contenuto della funzione in un blocco try/catch e vedere cosa succede se questo tipo di cose ti affligge.

7

è necessario passare nell'evento se si desidera impedire Default.

html:

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

script:

function runFunction (evt) { 
    evt.preventDefault(); 
    evt.stopPropagation(); 
}