2009-04-25 25 views
10

Podría estar haciendo algo estúpido. Pero si tengo una relación normal como:¿Cómo puedo interceptar un enlace con jQuery cuando uso una llamada ajax?

<div id="changeMe"></div> 
<a href="/Not/Intercepted" id="interceptMe">A link</a> 

y hay que adjuntar un evento de clic jQuery para el enlace tal que así:

$('#interceptMe').click(function() { 
    $('#changeMe').text('Changed'); 
    return false; 
}); 

Todo funciona color de rosa. La página hace no ser redirigido a/Not/Intercepted, que es lo que yo pensaría que sería correcto.

Ahora ...

I introduct una llamada ajax como $ .get al evento click y ahora mi página será redirigido a la página de forma incorrecta, que sobrescribe esencialmente la llamada AJAX.

$('#interceptMe').click(function() { 
    $.get('/Ajax/Call', goesIn, function(comesOut) { 
    $('#changeMe').html(comesOut); 
    }, "html"); 
    return false; 
}); 

¿Hay una manera de hacer jQuery o Javascript todavía interceptan clic en el enlace para que no se vaya a la página href? Quiero mantener el href para aquellos usuarios que no están habilitando javascript. TIA!

+3

¿Estás seguro de que no funciona? Porque me parece bien (es decir, no debería redireccionar). – cletus

+0

Eso es lo que estaba pensando. También me parece correcto, así que no estoy seguro de qué diablos está pasando. – rball

+0

Ahora está funcionando. ¡Mi error! – rball

Respuesta

22

lugar de retorno falsa, el uso ....

$("#interceptMe").click(function(event){ 

    event.preventDefault(); 

    // Ajax here 

    return false; //for good measure 
}); 

http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29

que he tenido muchos problemas con IE sobre todo, no escuchar a devolver false. Al parecer, también lo han hecho otros http://coffeeandpaste.blogspot.com/2009/02/javascript-onclick-return-false-does.html

+0

@rball 'return false' debe hacer Lo mismo sin embargo. Nunca he tenido este problema antes en 3.5 años de usar jQuery. Si 'event.preventDefault' funciona y 'return false' no, por favor avíseme. – KyleFarris

+1

Lo haré, gracias por la respuesta. También pensé que era extraño, pero está sucediendo en todo lo que tengo una llamada ajax. – rball

+0

@KyleFarris He tenido muchos problemas con los navegadores que no funcionan con return false. preventDefault() funciona hasta ahora al 100%, así que lo cambié por un código más confiable. Actualicé mi respuesta con un enlace a otros que tienen el mismo problema. –

Cuestiones relacionadas