2010-04-13 4 views
30

Cela semble trompeusement simple.Comment remplacer l'événement online onclick?

Comment remplacer l'événement onclick dans le code HTML suivant en utilisant JavaScript?

<a id="sample" href="..." onclick="alert('hello world')" />...</a> 

Je l'ai essayé avec jQuery, mais cela n'a pas fait l'affaire:

$('#sample').attr('onclick','alert("done")') 

Supposons que le HTML est pré-écrit et ne peut pas être changé, autre que la manipulation avec JavaScript.

Répondre

41

Essayez ceci:

// Setting the DOM element's onclick to null removes 
// the inline click handler 
$("#sample")[0].onclick = null; 
$("#sample").click(function() { alert("done") }); 
+0

Ce n'était pas évident, et cela a fonctionné. Merci Andrew. Pourquoi le [0]? –

+1

@Diodeus: Les objets jQuery, tout comme les collections DOM ou les tableaux, ont des index numériques pour chaque élément contenu. '[0]' va chercher le premier élément correspondant du sélecteur. –

+0

Je suppose que je sélectionne par ID qu'il serait unique et n'aboutirait jamais à un tableau. Parfois, ce qui semble logique est ... faux. –

1

Essayez:

document.getElementById("sample").onclick = $.noop; 

$.noop == function(){}; 

jQuery noop

+1

Cela ne fonctionne pas non plus. –

+0

'$ (" # sample ") [0] .onclick = null;' et 'document.getElementById (" sample "). Onclick = $ .noop;' sont presque identiques. Comment pouvez-vous dire que cela n'a pas fonctionné? –

+0

J'ai testé cela et trouvé que cela fonctionne pour mes fins (je n'ai pas testé pour voir si elle remplace l'attribut, mais c'est probablement le cas) –

6
<a id="sample" href="..." onclick="alert('hello world'); return false;" />...</a> 

Ou

$('#sample').attr('onclick','alert("done"); return false;') 

En dépit d'être en mesure de mettre l'return false; soit directement dans le onclick ou en utilisant jQuery, il n'a pas exige réellement que jQuery soit utilisé. L'avantage est que si pour une raison quelconque votre script jQuery conduit à un 404, votre code fonctionnera toujours.

J'ai trouvé la réponse here.

+0

+1 C'est mieux que la réponse que j'ai donnée. :-) –

+1

Retour faux n'est pas le problème, et cela ne fonctionne pas. –

+0

Oh balles, je pense que j'ai complètement mal compris votre question! Désolé mec: S –

4

Cela peut aussi être fait sans jQuery:

document.getElementById("sample").setAttribute('onclick','alert("done")'); 
Questions connexes