2010-10-13 29 views
1

J'ai une question (étonnamment;)):JavaScript: comment retourner false pour lier sans casser la fonction?

Comment puis-je retourner faux à un lien sans casser la fonction? Je l'ai fait précédemment sans jQuery, à l'époque, j'ai mis une animation à exécuter après un intervalle et renvoyé faux. Cette fois j'ai besoin de la fonction pour continuer à courir.

function initNavLinks(){ 
    navLinks = $("div#header a").click(function(){ 
     return false; 
     processSlideReq(); 
    }) 
} 

Thanx à l'avance

Répondre

4

Y at-il des raisons pour lesquelles vous ne pouvez pas échanger simplement les lignes autour et faire:

function initNavLinks(){ 
    navLinks = $("div#header a").click(function(){ 
     processSlideReq(); 
     return false; 
    }) 
} 

?

+1

Oui, alors il appelle processusSlideReq fonction, qui à son tour appelle une fonction qui anime les choses. Jusqu'à ce qu'il finisse d'exécuter ces fonctions, le navigateur suivra le lien. – Dean

+1

@Dean - êtes-vous sûr? Rien ne devrait arriver avant que le gestionnaire de clic ne revienne. – Skilldrick

+0

Oh désolé désolé, la fonction était inachevée. Thanx cela fonctionne bien :) – Dean

6

Vous devriez probablement empêcher l'action par défaut de l'événement comme celui-ci:

function initNavLinks(){ 
    navLinks = $("div#header a").click(function(e){ 
     e.preventDefault(); 
     processSlideReq(); 
    }) 
} 

Vous pouvez lire jQuery de Event Object documentation et bind documention de comprendre les différences entre de retour faux , en appelant preventDefault() et en appelant stopPropogation() dans les gestionnaires d'événements.

+0

preventDefault() n'est pas supporté par IE – Dean

+1

Où voyez-vous cela? Parlez-vous de l'objet Event par défaut d'IE? Parce que Event :: preventDefault() de jQuery existe depuis la version 1 et est normalisé sur tous les navigateurs. Voici un exemple de cela qui fonctionne pour moi dans IE7 http://jsbin.com/olefe3/2 – SBUJOLD

+0

Thanx, Il vérifie cela, sry je ne savais pas que vous parliez de jQuery: preventDefault() – Dean

1

Juste comme une curiosité théorique, vous pouvez également utiliser JavaScript 1.7's generator support (bien que cela ne fonctionne que dans Firefox et ne s'appliquerait pas pour les liens).

function x() { 
    yield false; 
    yield doSomething(); 
} 

first_return_value = x(); 
second_return_value = x();