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;
}
Eso significa ningún caso se pasa a la función. Gracias. – Vicky