2010-12-07 7 views
5

J'ai un extrait de code JavaScript qui affiche un widget sur votre page. Il y a des liens qui obtiennent la sortie par le script qui ressemble à ceci:Modifier l'événement onclick avec jQuery

<a href="#" onclick="somefunction()">Link</a> 

Ces liens provoquent un certain JS au feu. C'est génial. Le problème est le href="#" et l'absence d'un "return false;" à la fin de l'attribut onclick.

Lorsque je clique sur un de ces liens, le navigateur saute vers le haut du document. Avec le widget positionné près du bas du document, ce n'est pas bon.

Malheureusement, je n'ai aucun contrôle sur la sortie du script.

En utilisant jQuery je peux faire référence à ces liens en utilisant $("#wxheader ul li a"). J'ai essayé le code suivant, mais il ne fonctionne pas:

$(document).ready(function(){ 
    $("#wxheader ul li a").each(function(){ 
     var onclick = $(this).attr("onclick") + "; return false;"; 
     $(this).attr("onclick", onclick); 
    }); 
}); 

Je veux écrire une fonction jQuery qui changera chaque attribut onclick pour ajouter "return false;" et il doit courir après le script a sortie le contenu de la page .

Des idées?

Répondre

4

Essayez ceci. L'astuce consiste à appeler preventDefault dans le gestionnaire, ce qui empêche la propagation de l'action de l'élément par défaut. J'espère que ça aide.

$("#wxheader ul li a").click(function(e){ 
    e.preventDefault(); 
    return false; 
}); 
+0

LOL ... Quoi de neuf avec tous les votes vers le bas? – James

+0

Aucune idée à propos de ces downvotes. Je pense que vos concurrents ne veulent pas que vous obteniez du crédit. Le vôtre était la réponse la plus rapide qui a fait ce que j'avais besoin de faire. – Jazzerus

+0

Merci de m'avoir ramené au crédit neutre sur ce post;) – James

2

Vous devriez être en mesure de le remplacer dans jquery, essayez ceci:

$("#wxheader ul li a").each(function(){ 
    $(this).click(function(e) { 
     e.preventDefault(); 
    }); 
}); 

Ce arrête le processus normal de l'événement click.

fixe, cela arrêtera efficacement l'interprétation par défaut du navigateur de l'événement click

+0

Ceci est faux, 'each' traverse l'ensemble jQuery, il ne lie pas un événement de clic. –

+0

Cela ne fonctionnerait pas car il n'y a pas d'événement! – RobertPitt

+0

Vous avez raison, j'ai copié son code trop rapidement, éditant pour le réparer. –

2

Avez-vous essayé d'utiliser href="javascript:"?

+0

qu'est-ce qu'il y a avec toutes les downvotes? : \ – bevacqua

2

Vous pouvez également utiliser:

<a href="javascript:void(0)" onclick="somefunction()">Link</a> 
+0

J'aurais toujours besoin d'une fonction jQuery pour changer le href des liens de "#" en "javscript: void (0)" puisque je n'ai aucun contrôle sur la sortie du script. – Jazzerus

+0

Est-ce que vous votez contre toutes les réponses incorrectes? Cela semble un peu absurde. Voyez si je vous aide la prochaine fois. – Dutchie432

+0

Je ne pense pas qu'il l'ait fait, ça aurait dû être quelqu'un d'autre si vous regardez les maths. – James

2

Je ferais comme ça

$('#wxheader ul li a').each(function(i, element) 
{ 
    // Capture the existing callback function 
    var originalCallback = element.onclick; 

    // Now, remove it from the elemnet 
    element.onclick = null; 

    // And replace it with our own, which calls the orignal 
    // with the proper context, and prevents the default 
    // event action 
    $(element).click(function(event) 
    { 
    event.preventDefault(); 
    originalCallback.call(window); 
    }); 
}); 
+0

n'est-ce pas ce que fait mon code? –

+0

Il semble que oui. Approches légèrement différentes mais sinon le même sens. Pourquoi demandez-vous? –

2

Rechercher dans l'objet preventDefault dans jQuery.

http://api.jquery.com/event.preventDefault/

qui lui permettra de ne pas exécuter d'abord ou en ajoutant return false dans le gestionnaire de clic jQuery. preventDefault peut ne pas fonctionner dans Firefox. Je ne suis pas entièrement sûr.

$("#wxheader ul li a").click(function(){ 
    //do stuff// 
    return false; 
}); 

Ceci est une page de test que j'ai faite avec quelques fonctionnalités ajax sur un lien pour quelqu'un qui essaie de remplacer le clic régulier. C'est la fonctionnalité dont je parle si c'est ce que vous cherchez.

http://testing.kobbyappiah.com/Design_and_Evolve/ajaxTest.html