Per quanto ne so, non è possibile aggiungere due gestori onclick di un elemento a tutti.
Supponiamo che obj sia un elemento, quindi la proprietà onclick di obj è considerata una funzione e quindi viene chiamata come metodo ogni volta che si verifica quell'evento. Se non è una funzione, non accadrà nulla.
JavaScript ereditato da Scheme una proprietà molto interessante, in JavaScript, non si definiscono funzioni come in PHP o C. Si creano funzioni anonime e si memorizzano in una variabile. Javascript è 'Lisp-1', non ci sono identificatori di funzione, ci sono variabili, che possono contenere numeri, matrici e funzioni.
function name(arg) {return arg;}
è che se non sbaglio veramente zucchero per:
name = function(arg) {return arg;};
'nome' qui è una variabile, possiamo anche ri-Asign non importa quanto abbiamo definito tale funzione. A differenza del modello a oggetti di Java, in Javascript, un "metodo" è puramente una proprietà, una variabile che contiene semplicemente una funzione che può o non può utilizzare la parola chiave "this". Questo è il motivo per cui non puoi avere due eventi onclick allo stesso tempo. L'ambiente runtime chiama semplicemente la proprietà (che è prevista per ospitare una funzione) dell'elemento chiamato "onclick" ogni volta che si fa clic su di esso. Consideralo come lo stesso comportamento ad hoc del tipo di chiamata 'main' per avviare un programma.
Per assegnare più gestori di eventi, si utilizza una funzione con un effetto collaterale, come.
obj.onclick = function {firstEvent();secondEvent();}
Per modificare o rimuoverlo, abbiamo riassegnare o de-assegna come qualsiasi variabile.
obj.onclick = null;
E nel caso in cui abbiamo bisogno di invocare che il comportamento in un altro modo:
obj.onclick();
Possiamo anche usare questa in quella funzione, naturalmente, per modificare l'oggetto stesso o farvi riferimento.
Modifica: Oh aspetta, ora capisco che intendi con un pulsante molti pulsanti diversi.
Bene, poi basta raccogliere tutti gli elementi come:
allElements = document.getElementsByTagName('*');
e quindi si utilizza un ciclo:
var i = 0; while(obj = allElements[i++]) obj.onclick = null;
(e no, che i singoli = non è un errore di battitura)
Stai utilizzando l'attributo onclick in linea? – Mottie
+1 Ottima domanda. –
Un'opzione migliore e più diretta è usare la soluzione di @ jiggy http://stackoverflow.com/questions/803936/how-to-clear-remove-javascript-event-handler – chowey