2010-04-13 3 views
30

Dies scheint täuschend einfach.Wie überschreiben Sie Online Onclick-Ereignis?

Wie überschreiben Sie das onclick -Ereignis im folgenden HTML mit JavaScript?

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

Ich habe versucht, es mit jQuery, aber das hat nicht den Trick:

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

Nehmen Sie die HTML ist bereits geschrieben und kann nicht geändert werden, außer es mit JavaScript manipulieren.

Antwort

41

Versuchen Sie folgendes:

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

Das war nicht offensichtlich, und es hat funktioniert. Danke, Andrew. Warum die [0]? –

+1

@Diodeus: jQuery-Objekte weisen ähnlich wie DOM-Sammlungen oder -Arrays numerische Indizes für jedes enthaltene Element auf. '[0]' ruft das erste übereinstimmende Element des Selektors ab. –

+0

Ich würde annehmen, da ich nach ID auswähle, dass es eindeutig wäre und nie zu einem Array führen würde. Manchmal scheint etwas logisch zu sein .... falsch. –

1

Versuchen:

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

$.noop == function(){}; 

jQuery noop

+1

Dies hat nicht funktioniert. –

+0

'$ (" # sample ") [0] .onclick = null;' und 'document.getElementById (" sample "). Onclick = $ .noop;' sind fast identisch. Wie kannst du sagen, dass das nicht funktioniert hat? –

+0

Ich habe dies getestet und festgestellt, dass es für meine Zwecke funktioniert (Ich habe nicht getestet, ob es Attribut überschreibt, aber wahrscheinlich tut es) –

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

Oder

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

Trotz der return false; entweder direkt in der Onclick oder mithilfe von jQuery einstellen zu können, nicht wahr tatsächlich erfordern jQuery überhaupt verwendet werden. Der Vorteil ist, wenn Ihr jQuery-Skript aus irgendeinem Grund zu einem 404 führt, wird Ihr Code trotzdem funktionieren.

Ich fand die Antwort here.

+0

+1 Das ist besser als die Antwort, die ich gab. :-) –

+1

Return false ist nicht das Problem, und das funktioniert nicht. –

+0

Oh Bälle, ich denke ich habe deine Frage völlig falsch verstanden! Sorry, Alter: S –

4

Dies kann auch ohne jQuery getan werden:

document.getElementById("sample").setAttribute('onclick','alert("done")'); 
Verwandte Themen