Attualmente esistono tre diversi metodi per la definizione dei gestori di eventi (una funzione che viene attivata quando viene rilevato un determinato evento): il metodo tradizionale, il metodo W3C e il metodo Microsoft.
Metodo tradizionale
Nel metodo tradizionale, i gestori di eventi sono definiti impostando l'on evento proprietà di un elemento in Javascript (come si sta facendo nel vostro codice di esempio), o impostando il su evento in un tag HTML (ad esempio <select onchange="...">
). Sebbene questo sia il metodo più semplice da usare, il suo uso è generalmente disapprovato ora, perché come hai scoperto, è piuttosto rigido - non è facile aggiungere e rimuovere i gestori di eventi a un elemento che ha già un gestore di eventi collegato. Inoltre, non è più considerata una pratica appropriata mescolare javascript con HTML, ma piuttosto dovrebbe essere contenuto all'interno o caricato tramite un tag <script>
.
W3C/metodi Microsoft
Il W3C (World Wide Web Consortium) e Microsoft sia definire i propri modelli di eventi. I due modelli funzionano essenzialmente allo stesso modo, ma usano diverse sintassi. Il modello Microsoft viene utilizzato in Internet Explorer e il modello W3C viene utilizzato in altri browser (Firefox, Opera, Safari, Chrome, ecc.). In entrambi i modelli, sono disponibili funzioni per aggiungere gestori di eventi (addEventListener per W3C, attachEvent per Microsoft) e rimuovere gestori di eventi (removeEventListener/detachEvent). Ciò consente di aggiungere e rimuovere dinamicamente gestori specifici a un elemento; nel tuo caso, potresti aggiungere il primo gestore in base alla prima condizione e il secondo in base alla seconda condizione. Il "problema" con questi metodi è che ce ne sono due, quindi è necessario utilizzare entrambi i metodi per garantire che il gestore di eventi sia registrato in tutti i browser (ci sono anche alcune sottili differenze tra i due modelli, ma quelle differenze non sono importanti per lo scopo di questa domanda). Infatti, se guardi, troverai un gran numero di funzioni "addEvent" che usano entrambi i metodi come necessario (e generalmente ricadono sul metodo tradizionale per i browser più vecchi). Ad esempio, un concorso è stato pubblicato sul blog QuirksMode nel 2005 per creare la migliore funzione "addEvent", il cui risultato (insieme alla funzione vincente) è possibile vedere here.
Inoltre, se si utilizza una libreria javascript come Prototype o jQuery, vengono fornite funzioni di gestione degli eventi incorporate che si prenderanno cura di quanto sopra per voi.
fonte
2009-06-03 18:58:53
non riesco proprio a capire perché non si può fare condizionale ramo di destra nel gestore di eventi comuni, perché avete bisogno di espandersi? –
Non è che non posso farlo, sarà un po 'una riprogettazione. Questa domanda riguardava come sarebbe possibile aggiungere funzionalità aggiuntive a una funzione. – Brian