2009-12-18 4 views
13

J'ai une ancre comme celui-ciévénement prioritaire jquery

<a href='#' onclick='return showform(this)'>click me</a> 

Mais je veux être en mesure de remplacer la fonction onclick, comment faire en jquery?

parce qu'il semble quand j'ajoute

$('a').click(function() { alert('hi there!'); }); 

le nouveau gestionnaire de clic ne surchargez pas l'ancien

+0

pourquoi click me? structure/contenu et comportement doivent être séparés. http://en.wikipedia.org/wiki/Unobtrusive_JavaScript – Wondering

+0

J'ai supprimé la fonction onclick et repose tout sur jquery car il semble plus flexible de cette façon ... Merci à tous pour les réponses :) –

Répondre

18

Avez-vous essayé quelque chose comme ceci:

$("a").removeAttr("onclick"); 
+0

Ancien post, mais c'est définitivement la méthode qui a fonctionné pour moi dans la fonction ready() – htmlr

+0

Travaillé parfaitement pour moi aussi! – KatharaDarko

10

Si vous utilisez jQuery comme ça, vous ne voulez pas de gestionnaires dans le code HTML . Ne pouvez-vous pas supprimer l'attribut onClick?

Si vous êtes inquiet au sujet de le casser, rechercher et remplacer sur:

onclick='return showform(this)' 

et le remplacer par

class='showform' 

Ensuite, vous pouvez faire:

$('a.showform').click(function (e) { 
    e.preventDefault(); 
    return showform(this); 
}); 

qui gardera vos gestionnaires existants travaillent.

22

Dans votre cas, l'événement onCick écrase celui de jQuery. Ce que vous pourriez être en mesure de le faire est:

$('a').unbind('click').click(function(){ 
    alert('why hello there children.'); 
}) 

Mais je crois que cela devrait être inclus après la

<a href='#' onclick='return showform(this)'>click me</a> 

Cela dit, vous devriez vraiment pas utiliser onClicks quand même ... il fait le code vraiment difficile à maintenir et à changer (comme vous l'avez découvert).

+0

Si vous êtes suite à Yahoo, tous les scripts sont inclus à la fin de la page de toute façon ... – Skilldrick

+0

C'est vrai, je pensais que je devais pointer cette partie, car le dernier événement onclick devrait remplacer le reste non? – SeanJA

+0

Cela dépend de l'appel de $ ('a'). Unbind(). Si c'est dans $ (document) .ready() alors ça pourrait être dans le 'head' et ça marche toujours. – Skilldrick

0

Il y a un plugin pour, mais vous ne devez faire quand vous avez vraiment besoin. Le plugin vous permet d'appeler la fonction originale ou ignorer/remplacer entièrement

jQuery Override Plugin

$(divElementObj).override('onclick', 'click', function(...));