2009-05-15 8 views
37

Estoy intentando cargar algunas cosas usando AJAX cuando un usuario hace clic en un enlace, pero quiero que el enlace vaya realmente a algún lado para que la aplicación siga funcionando cuando javascript esté deshabilitado. ¿Hay alguna manera de hacer algo con javascript y cancelar la navegación cuando se hace clic en un enlace?Cómo cancelar la navegación cuando el usuario hace clic en un enlace (elemento <a>)?

¿Cuál es la mejor práctica? ¿Se puede hacer eso, o necesito reemplazar el enlace usando javascript o qué?

Respuesta

45

Si usted tiene HTML así:

<a href="no_javascript.html" id="mylink">Do Something</a> 

Se podría hacer algo como esto con jQuery:

$(document).ready(function() { 
    $('#mylink').click(function() { 
     doSomethingCool(); 
     return false; // cancel the event 
    }); 
}); 

Todo lo que tiene que hacer es cancelar el evento, haga clic con el Javascript para evitar que el valor por defecto acción de pasar. Por lo tanto, cuando alguien hace clic en el enlace con Javascript habilitado, se llama al doSomethingCool(); y se cancela el evento click (por lo tanto, el return false;) y evita que el navegador vaya a la página especificada. Si tienen Javascript deshabilitado, sin embargo, los llevaría directamente al no_javascript.html.

+3

+1, pero muchas personas pondrán href = "#" en los enlaces que planean usar con javascript. – Gromer

+0

bien, soy un idiota. Pensé que era lo que tenía que hacer, pero no funcionaba. Resulta que solo estaba almacenando en caché el javascript de modo que IE no estaba ejecutando mi nueva línea con return false. –

+1

@Gromer: la idea es hacer que funcione con o sin javascript. –

27

¿por qué jQuery?

HTML:

<a href="no_javascript.html" onclick="return doSmth()">Link</a> 

... y código javascript:

function doSmth(){ 
    // your code here 
    return false 
} 
+0

Bueno, estoy trabajando con jQuery (como parece la mayoría de las personas en este sitio), aunque no especifique ... pero gracias por la publicación, puede ser útil para alguien. –

+1

bien, ya veo. Creo que los marcos pueden ser útiles para grandes proyectos de gran alcance. Pero para sitios pequeños ... –

+4

Los marcos de JavaScript son útiles en todos los sitios de tamaño que se preocupan por la compatibilidad del navegador. Además, usar eventos en línea es una mala práctica en general. –

1

utilizo document.location.replace de navegar, pero cuando quiero cancelar la navegación, return false (en la misma función que document.location.replace) no cancela la navegación.

2

para IE al menos, simplemente ponga this.event.returnValue = false; al final del método.

por ejemplo:

function onClickFunction() 
{ 
    someMethod(); 
    this.event.returnValue = false; 
} 

que tenían un método complejo en el que este hizo el truco.

34

Nada de esto funcionó para mí con el navegador Google Chrome.

Esto es lo que hizo el trabajo, aunque (usando jQuery):

$(document).ready(function() { 
    $('#mylink').click(function(event) { 
     doSomethingCool(); 
     event.preventDefault(); // cancel the event 
    }); 
}); 
+2

La devolución de false funciona para IE, pero no para Firefox o Chrome; Esta solución funcionó para ambos, ¡Gracias! – Derrick

+0

Dos adiciones: 1) Uno puede querer invocar preventDefault() antes de hacer algo genial. 2) Agregue esto al principio de la función para apoyar el botón central del mouse correctamente: if (event.which! = 1) return; –

5

Lo que quiero hacer son:

a. para el atributo href, javascript:void(); se configurará

b. para el evento onclick, proporcionará una función para manejar el evento click y esa función devolverá false.

por ejemplo:

<script type="text/javascript"> 
    function myfunction() 
    { 
     //do something 
     return false; 
    } 
    </script> 

    <a href="javascript:void();" onclick="myfunction()">Link</a> 
3
<a href="http://www.google.com" class="ignore-click">Test</a> 

con jQuery:

<script> 
    $(".ignore-click").click(function(){ 
     return false; 
    }) 
</script> 

con JavaScript

<script> 
     for (var i = 0; i < document.getElementsByClassName("ignore-click").length; i++) { 
      document.getElementsByClassName("ignore-click")[i].addEventListener('click', function (event) { 
       event.preventDefault(); 
       return false; 
      }); 
     } 
</script> 

Se asigna la clase .ignore-click a tantos elementos que le gusta y hace clic en los elementos serán ignorados

-1

es sencilla, el uso atributo rel = "nofollow"

<a href="signin.php" rel="nofollow">sign in</a> 
1

La mejor manera debe ser esto.

<a href="javascript:undefined"></a> 
Cuestiones relacionadas