Wie entferne ich "onclick" mit JQuery?


99

PHP-Code:

<a id="a$id" onclick="check($id,1)" href="javascript:void(0)"  class="black">Qualify</a>

Ich möchte das entfernen, onclick="check($id,1)damit der Link nicht angeklickt werden kann oder " check($id,1)nicht ausgelöst wird. Wie kann ich das mit JQuery machen?"

Antworten:


237

Alter Weg (vor 1.7):

$("...").attr("onclick", "").unbind("click");

Neuer Weg (1.7+):

$("...").prop("onclick", null).off("click");

(Ersetzen Sie ... durch den gewünschten Selektor.)


26
Sollte das nicht removeAttr ('onclick') sein?
Roatin Marth

Ja, guter Punkt, könnte sauberer sein, aber ich bin nicht sicher, ob es sich vom Standpunkt der Ausführung unterscheiden würde.
glmxndr

6
Mit jQuery 1.7+ können Sie ein / aus verwenden: stackoverflow.com/questions/209029/…
Lance Cleveland

6
Siehe ersten Kommentar zu removeAttr api.jquery.com/removeattr Removing an inline onclick event handler using .removeAttr() doesn't achieve the desired effect in Internet Explorer 6, 7, or 8. To avoid potential problems, use .prop() instead
andyface

2
@andyface ja das steht in der Dokumentation, aber ich musste es auch .prop()für IE11 verwenden.
onetwo12

57

Ich weiß, dass dies ziemlich alt ist, aber wenn ein verlorener Fremder diese Frage auf der Suche nach einer Antwort findet (wie ich), ist dies der beste Weg, dies zu tun, anstatt removeAttr () zu verwenden:

$element.prop("onclick", null);

Unter Berufung auf das offizielle Doku von jQuerys :

"Durch das Entfernen eines Inline-Onclick-Ereignishandlers mit .removeAttr () wird in Internet Explorer 6, 7 oder 8 nicht der gewünschte Effekt erzielt. Verwenden Sie stattdessen .prop (), um mögliche Probleme zu vermeiden."


1
Ich fand, dass dies das beste Verfahren zum Entfernen von Onlick-Ereignissen ist, wenn Sie es so eingegeben haben. <span onlick="method()">sometext>/span>Die Veranstaltung ist völlig ungebunden und funktioniert
super

3
Ich denke nicht, dass dies der beste Weg ist. jsfiddle.net/TN2wr vs jsfiddle.net/TN2wr/1
Gus

Ich verwende einen JQ älter als 1.6, daher $ (Element) .attr ('onclick', null); funktioniert bei mir.
Metamagikum

18

onclickEigentum entfernen

Angenommen, Sie haben Ihr Klickereignis wie folgt inline hinzugefügt:

<button id="myButton" onclick="alert('test')">Married</button>

Dann können Sie das Ereignis folgendermaßen entfernen:

$("#myButton").prop('onclick', null); // Removes 'onclick' property if found

clickEreignis-Listener entfernen

Angenommen, Sie haben Ihr Klickereignis hinzugefügt, indem Sie einen Ereignis-Listener wie folgt definiert haben:

$("button").on("click", function() { alert("clicked!"); });

... oder so:

$("button").click(function() { alert("clicked!"); });

Dann können Sie das Ereignis folgendermaßen entfernen:

$("#myButton").off('click');          // Removes other events if found

Beides entfernen

Wenn Sie sich nicht sicher sind, wie Ihr Ereignis hinzugefügt wurde, können Sie beide wie folgt kombinieren:

$("#myButton").prop('onclick', null)  // Removes 'onclick' property if found
              .off('click');          // Removes other events if found

17

Wenn Sie jquery 1.7 verwenden

$('html').off('click');

sonst

$('html').unbind('click');


5

Nachdem ich mich so sehr mit Binden, Entbinden, Ein, Aus, Klicken, Attr, EntfernenAttr, Requisite beschäftigt hatte, ließ ich es funktionieren. Ich habe also das folgende Szenario: In meinem HTML habe ich KEINE Inline-Onclick-Handler angehängt.

Dann habe ich in meinem Javascript Folgendes verwendet, um einen Inline-Onclick-Handler hinzuzufügen:

$(element).attr('onclick','myFunction()');

Um dies zu einem späteren Zeitpunkt aus Javascript zu entfernen, habe ich Folgendes verwendet:

$(element).prop('onclick',null);

Auf diese Weise hat es für mich funktioniert, Klickereignisse in Javascript dinamisch zu binden und zu lösen. Denken Sie daran, KEINEN Inline-Onclick-Handler in Ihre Elemente einzufügen.


Ich mag das, aber warum sollte der eine Propeller sein und der andere attr?
Stachu

Ich bin nicht sicher, aber ich sehe dies so, dass Sie mit attr einen onclick-Handler mit der entsprechenden myFunction () hinzufügen / injizieren und die Requisite ('onclick', null) das Attribut entfernt, sodass keine Funktion aufgerufen wird. So hat es bei mir funktioniert. Und ich konnte feststellen, wie das Element über attr einen Klick-Handler hatte und wie es nach der Requisite entfernt wurde.
Bboydflo

1
Für die Zukunft, sollten Sie wirklich verwenden .on('click', myFunction)(beachten Sie, dass myFunctionist nicht in Anführungszeichen) und dann später.off('click')
JDB erinnert sich noch Monica

1

Was ist, wenn sich das Ereignis onclick nicht direkt auf das Element bezieht, sondern auf das übergeordnete Element? Das sollte funktionieren:

$(".noclick").attr('onclick','').unbind('click');
$(".noclick").click(function(e){
    e.preventDefault();
    e.stopPropagation();
    return false;
});

Durch Hinzufügen eines weiteren Klick-Listeners (um Standardeinstellungen usw. zu verhindern) wird dieser möglicherweise am Ende der Listener-Liste hinzugefügt, sodass die anderen Listener weiterhin zuerst ausgeführt werden. Ich bin mir jedoch nicht sicher, ob es zuerst oder zuletzt zur Liste hinzugefügt wird. Auf jeden Fall ist es besser, "Aus" zu verwenden, wie in anderen Antworten zu sehen.
Frederic Leitenberger

0

Versuchen Sie dies, wenn Sie das Onclick-Ereignis nach ID aufheben. Verwenden Sie dann:

$('#youLinkID').attr('onclick','').unbind('click');

Versuchen Sie dies, wenn Sie das Ereignis onclick nach Klasse aufheben. Verwenden Sie dann:

$('.className').attr('onclick','').unbind('click');
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.