Soweit ich weiß, kann man nicht an allen zwei Onclick-Handler auf ein Element hinzuzufügen.
Say obj ist ein Element, dann wird die Eigenschaft onclick von obj als eine Funktion betrachtet und dann als Methode aufgerufen, wenn dieses Ereignis eintritt. Wenn es keine Funktion ist, wird nichts passieren.
JavaScript geerbt von Scheme eine sehr interessante Eigenschaft, in JavaScript, definieren Sie keine Funktionen wie in PHP oder C. Sie erstellen anonyme Funktionen und speichern sie in einer Variablen. Javascript ist 'Lisp-1', es gibt keine Funktionsbezeichner, es gibt Variablen, die Zahlen, Arrays und Funktionen enthalten können.
function name(arg) {return arg;}
ist, wenn ich nicht wirklich Zucker täuscht für:
name = function(arg) {return arg;};
‚name‘ hier ist eine Variable, können wir auch wieder asign es egal, wie wir diese Funktion definiert. Im Gegensatz zum Objektmodell von Java ist eine "Methode" in Javascript eine reine Eigenschaft, eine Variable, die einfach eine Funktion enthält, die das Schlüsselwort "this" möglicherweise nicht verwendet. Aus diesem Grund können Sie nicht gleichzeitig zwei onclick-Ereignisse haben. Die Laufzeitumgebung ruft einfach die Eigenschaft (die erwartungsgemäß eine Funktion enthält) des Elements mit dem Namen 'onclick' auf, wenn Sie darauf klicken. Sehen Sie es als das gleiche Ad-hoc-Verhalten des Aufrufs von 'main' an, um ein Programm zu starten.
Um mehrere Event-Handler zuzuweisen, verwenden Sie eine Funktion mit einem Nebeneffekt, wie.
Um es zu ändern oder zu entfernen, weisen wir es wie jede Variable neu oder ab.
obj.onclick = null;
Und für den Fall brauchen wir dieses Verhalten in einer anderen Art und Weise aufzurufen:
obj.onclick();
Wir können dies auch in dieser Funktion natürlich nutzen das Objekt selbst oder auf sie verweisen zu ändern.
Edit: Oh, Moment mal, ich sehe jetzt, dass Sie mit einem Knopf viele verschiedene Tasten meinen.
Na, dann sammeln Sie einfach alle Elemente wie:
allElements = document.getElementsByTagName('*');
Und dann verwenden Sie eine Schleife:
var i = 0; while(obj = allElements[i++]) obj.onclick = null;
(und nein, das einzelne = ist kein Tippfehler)
Verwenden Sie das Inline-onclick-Attribut? – Mottie
+1 Große Frage. –
Eine bessere, direktere Möglichkeit ist es, @ jiggy's Lösung zu verwenden http://stackoverflow.com/questions/803936/how-to-clear-remove-javascript-event-handler – chowey