O ile mi wiadomo, nie można dodać dwa programy obsługi onclick do elementu w ogóle.
Powiedz, że obiekt jest elementem, a właściwość onclick obiektu jest uważana za funkcję, a następnie wywoływana jako metoda w momencie wystąpienia tego zdarzenia. Jeśli to nie działa, nic się nie stanie.
JavaScript odziedziczony po Schemacie bardzo interesująca właściwość, w JavaScript, nie definiuje się funkcji jak w PHP lub C. Tworzysz anonimowe funkcje i przechowujesz je w zmiennej. JavaScript to "Lisp-1", nie ma identyfikatorów funkcji, są zmienne, które mogą zawierać cyfry, tablice i funkcje.
function name(arg) {return arg;}
Czy jeśli się nie mylę naprawdę cukier dla:
name = function(arg) {return arg;};
„name” tutaj jest zmienna, możemy również ponownie asign to bez względu na to, jak zdefiniowano tę funkcję. W przeciwieństwie do modelu obiektowego Java, w JavaScript, "metoda" jest czysto właściwością, zmienną, która po prostu posiada funkcję, która może lub nie może używać słowa kluczowego "to". Dlatego nie możesz mieć dwóch zdarzeń onclick w tym samym czasie. Środowisko wykonawcze po prostu wywołuje właściwość (która ma zawierać funkcję) elementu o nazwie "onclick" za każdym razem, gdy go klikniesz. Zobacz to samo zachowanie typu ad hoc, nazywając "main", aby uruchomić program.
Aby przypisać wiele procedur obsługi zdarzeń, należy użyć funkcji z efektem ubocznym, np..
obj.onclick = function {firstEvent();secondEvent();}
Aby je zmienić lub usunąć, ponownie przyporządkowujemy lub odznaczamy je tak, jak każdą zmienną.
obj.onclick = null;
A w przypadku musimy powoływać się na to zachowanie w inny sposób:
obj.onclick();
Możemy również skorzystać z tej funkcji, w tym oczywiście zmienić sam obiekt lub go odwołać.
Edytuj: O, zaczekaj, widzę teraz, że masz na myśli wiele przycisków.
Cóż, to po prostu zebrać wszystkie elementy, takie jak:
allElements = document.getElementsByTagName('*');
a następnie użyć pętli:
var i = 0; while(obj = allElements[i++]) obj.onclick = null;
(a nie, że pojedyncze = nie jest literówka)
Czy używasz wbudowanego atrybutu onclick? – Mottie
+1 Świetne pytanie. –
Lepszą, bardziej bezpośrednią opcją jest użycie rozwiązania @ jiggy http://stackoverflow.com/questions/803936/how-to-clear-remove-javascript-event-handler – chowey