2012-07-19 30 views
5

Este es mi código htmllínea Javascript evento onclick

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

Este es mi archivo javascript

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

Pero cuando hago clic en el enlace Hit, redirecciona.

Respuesta

8

para atar las dos respuestas muy correctos juntos, lo que ha ocurrido es que ha inline una función donde se ha escrito onclick="return runFunction();"

Si nos fijamos en que, lo que está haciendo en realidad va así:

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

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

¿Ves el problema?

Mi runFunction se está llamando sin ningún objeto de evento pasado, en absoluto. ... lo que significa que var thisLink = (evt) ? va a devolver falso, lo que significa que va a tratar de ejecutarse en el modo oldIE.

Al escribir onclick="runFunction", eso es lo mismo que decir:

link.onclick = runFunction; 

Lo que significa que cuando el evento onclick ocurre, runFunction se llamará, y en los navegadores compatible con W3C, se enviará un objeto de evento.

Por eso esa solución funciona.

La mejor manera de evitar mucha confusión es tratar con JavaScript desde dentro de JavaScript y tratar con HTML dentro de HTML, para que no tenga que preocuparse por cómo las cadenas se traducen en código.

Ahora, para conseguir todo esto para trabajar, y evitar la redirección, que desea hacer esto:

para los navegadores del W3C (los que pasan el parámetro de 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

Eso significa ningún caso se pasa a la función. Gracias. – Vicky

0

Cuando conecté el código en cromo, que tiene esto como el error en la consola: TypeError no detectada: No se puede leer la propiedad 'srcElemento' de la indefinida

SI las bombas javascript fuera durante el procesamiento, nunca se pone una posibilidad de regresar, por lo que el navegador tiende a ignorar lo que está en el controlador onclick después de la excepción.

Desde que se destruyó ... comportamiento predeterminado de las etiquetas de anclaje, que es enviarte a donde quiera que diga el href.

Pruebe envolviendo el contenido de la función en un bloque try/catch y vea qué sucede si esto le molesta.

7

que necesita para pasar en el evento si desea evitar por defecto.

html:

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

guión:

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