[Risolto][JS] Classe definita in (function); renderla glob

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
TommyB1992
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 862
Iscrizione: domenica 7 luglio 2013, 15:55
Desktop: GNU/Linux
Distribuzione: Ubuntu 22.04.2 LTS
Sesso: Maschile

[Risolto][JS] Classe definita in (function); renderla glob

Messaggio da TommyB1992 »

Ciao ragazzi,

ho scritto una classe di cui riporto il pezzo di codice incriminato:
http://pastebin.com/HLgEcvSB

Se potete notare la riga: div.setAttribute("onClick", "Keyboard.insert_char(this.innerHTML)"); non funzionerà mai perchè ovviamente la classe Keyboard la definisco dentro a una funzione, ed anche se definisco var Keyboard = {}; al di fuori di essa non funziona.
Ultima modifica di TommyB1992 il venerdì 19 giugno 2015, 14:01, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [JS] Classe definita in (function() {/**/}();) renderla

Messaggio da Zoff »

Stai usando lo strict-mode è normale che sia così.

Scrivere il codice js come stringa in un attributo è decisamente sconsigliabile. Basta usare addEventListener:

Codice: Seleziona tutto

div.addEventListener('click', function(){ Keyboard.insert_char(this.innerHTML); })
In questo modo eviti la necessità che Keyboard sia visto globalmente.


Consiglio di guardare lo standard AMD e RequireJS su come gestire le dipendenze in javascript.
Per il futuro sono utili anche i moduli di ECMAScript 6 (ovvero la nuova versione di JS): https://developer.mozilla.org/en-US/doc ... nts/import
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
TommyB1992
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 862
Iscrizione: domenica 7 luglio 2013, 15:55
Desktop: GNU/Linux
Distribuzione: Ubuntu 22.04.2 LTS
Sesso: Maschile

Re: [JS] Classe definita in (function() {/**/}();) renderla

Messaggio da TommyB1992 »

Zoff [url=http://forum.ubuntu-it.org/viewtopic.php?p=4770945#p4770945][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Stai usando lo strict-mode è normale che sia così.

Scrivere il codice js come stringa in un attributo è decisamente sconsigliabile. Basta usare addEventListener:

Codice: Seleziona tutto

div.addEventListener('click', function(){ Keyboard.insert_char(this.innerHTML); })
In questo modo eviti la necessità che Keyboard sia visto globalmente.


Consiglio di guardare lo standard AMD e RequireJS su come gestire le dipendenze in javascript.
Per il futuro sono utili anche i moduli di ECMAScript 6 (ovvero la nuova versione di JS): https://developer.mozilla.org/en-US/doc ... nts/import
Ciao Zoff, inserire l'elemento nell'addEventListener è quello che ho fatto a prescindere, ma avendo provato questa versione precedentemente ero curioso di capire il perchè non funzionasse.

Comunque grazie per le guide, gli darò una letta.
TommyB1992
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 862
Iscrizione: domenica 7 luglio 2013, 15:55
Desktop: GNU/Linux
Distribuzione: Ubuntu 22.04.2 LTS
Sesso: Maschile

Re: [RISOLTO][JS] Classe definita in (function); renderla gl

Messaggio da TommyB1992 »

Vorrei comunque incollare anche la soluzione di un altro utente (non si sa mai che sia utile a qualcuno):
Vindav ha scritto:una soluzione è quella, l'altra è quella di rendere globale Keyboard, per farlo basta togliere il var.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [RISOLTO][JS] Classe definita in (function); renderla gl

Messaggio da Zoff »

Considera però che l'utilizzo delle globals è una Bad practice.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti