2009-04-25 5 views
10

Je fais peut-être quelque chose de stupide. Mais si j'ai un lien normal comme:Comment puis-je intercepter un lien avec jQuery lors de l'utilisation d'un appel ajax?

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

et je joins un événement click jQuery pour le lien comme ceci:

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

Tout fonctionne Peachy. La page pas est redirigée vers/Not/Intercepted, ce que je pense serait correct.

maintenant ...

J'Introduct un appel ajax comme .get de $ à mon événement click et maintenant ma page sera correctement redirigés vers la page, qui remplace essentiellement l'appel ajax.

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

Y at-il un moyen de faire jQuery ou javascript interceptent toujours le lien cliquez donc il ne va pas à la page href? Je veux garder le href pour les utilisateurs qui n'activent pas javascript. TIA!

+3

Êtes-vous sûr que cela ne fonctionne pas? Parce que cela me semble correct (c'est-à-dire qu'il ne devrait pas rediriger). – cletus

+0

C'est ce que je pensais. Cela me semble correct, donc je ne suis pas sûr de ce qui se passe. – rball

+0

Maintenant, ça fonctionne. Ma faute! – rball

Répondre

22

au lieu de fausse déclaration, l'utilisation ....

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

    event.preventDefault(); 

    // Ajax here 

    return false; //for good measure 
}); 

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

J'ai eu de nombreux problèmes avec IE et surtout pas écouter return false. Apparemment, il en existe d'autres http://coffeeandpaste.blogspot.com/2009/02/javascript-onclick-return-false-does.html

+0

@rball 'return false' devrait faire le même chose cependant. Je n'ai jamais eu ce problème auparavant dans 3,5 ans d'utilisation de jQuery. Si 'event.preventDefault' fonctionne et 'return false' non, faites le moi savoir. – KyleFarris

+1

Fera, merci pour la réponse. J'ai aussi pensé que c'était bizarre, mais ça se passe sur tout ce que j'ai à faire. – rball

+0

@KyleFarris J'ai eu de nombreux problèmes avec les navigateurs ne fonctionne pas avec return false. preventDefault() fonctionne jusqu'à présent à 100%, donc je suis passé à un code plus fiable. J'ai mis à jour ma réponse avec un lien vers d'autres ayant le même problème. –

Questions connexes