|
|
||||||
|
#1
|
|
|
|
|
Salve a tutti!
Programmo in Javascript ormai da anni, ma non ho mai capito a che serve una cosa e non so dove trovarmi la risposta: quando dichiaro un evento HTML faccio, per esempio, onclick="nomeFunzione()" Ho sempre fatto così e ha sempre funzionato, almeno da IE6 in poi. Ora, come mai spesso trovo cose tipo onclick="javascript:nomeFunzione()" ? L'unica risposta che riesco a darmi è che quel "javascript:" sia una specifica del linguaggio che si usa per manipolare quell'evento: una cosa, insomma, che è ormai obsoleta (come specificare language="Javascript" nei tag script) da quando JS è il linguaggio di scripting di default dei browser web. C'ho preso o c'è qualche altra spiegazione? Grazie anticipatamente! Massi |
|
|
|
#2
|
|
|
|
|
On 20/02/12 14:20, massic80 wrote:
> Programmo in Javascript ormai da anni, ma non ho mai capito a che serve > una cosa e non so dove trovarmi la risposta: quando dichiaro un evento > HTML faccio, per esempio, > > onclick="nomeFunzione()" > > Ho sempre fatto così e ha sempre funzionato, almeno da IE6 in poi. > Ora, come mai spesso trovo cose tipo > > onclick="javascript:nomeFunzione()" In breve: la forma che usi tu è corretta, l'altra errata ma i browser ignorano generalmente l'errore. Andando più nel dettaglio diciamo che "javascript:" non c'entra nulla con il linguaggio in quanto è uno "pseudo protocollo" per un URL contente codice JavaScript. Un suo utilizzo comune è nei bookmarklet: <http://en.wikipedia.org/wiki/Bookmarklet> Sarebbe formalmente corretto usare questo pseudo protocollo in attributi in cui indichi un URL, come l'attributo "href" di un tag "a". Di dubbia utilità, ma formalmente corretto. Gli attributi per i gestori di eventi, come "onclick" nel tuo esempio, si aspettano come contenuto codice JavaScript e quindi l'indicazione di un protocollo è assurda. |
|
#3
|
|
|
|
|
Il 20/02/2012 14:52, Andrea Scartabelli ha scritto:
Grazie Andrea, scusa se entro più nel dettaglio, ma voglio capire bene :) > In breve: la forma che usi tu è corretta, l'altra errata E allora perché la usano? Da dove viene l'idea? Dai bookmarklet? > Sarebbe formalmente corretto usare questo pseudo protocollo in attributi > in cui indichi un URL, come l'attributo "href" di un tag "a". ....infatti si vede spesso in href="javascript:void(0)". Lì si aggiunge un'altra domanda (perché passare 0 a void?), ma voglio rimanere IT: qui viene usato come se avessi detto http piuttosto che ftp, piuttosto che ed2k (il protocollo per emule)? Questo ha un senso... > Di dubbia utilità, ma formalmente corretto. Quello che penso io l'utilità suppongo ce l'abbia: tu a cosa ti riferisci? > Gli attributi per i gestori di eventi, come "onclick" nel tuo esempio, > si aspettano come contenuto codice JavaScript e quindi l'indicazione di > un protocollo è assurda. Mi sembrava infatti :D Massi |
|
#4
|
|
|
|
|
On 20/02/12 15:03, massic80 wrote:
> Il 20/02/2012 14:52, Andrea Scartabelli ha scritto: > Grazie Andrea, scusa se entro più nel dettaglio, ma voglio capire bene :) Prego, e non c'è nulla di cui scusarsi, anzi. >> In breve: la forma che usi tu è corretta, l'altra errata > E allora perché la usano? Da dove viene l'idea? Dai bookmarklet? Onestamente non ho idea dell'origine "storica" dell'errore, ma attribuirei banalmente il tutto a normale ignoranza. >> Sarebbe formalmente corretto usare questo pseudo protocollo in attributi >> in cui indichi un URL, come l'attributo "href" di un tag "a". > ...infatti si vede spesso in href="javascript:void(0)". > Lì si aggiunge un'altra domanda (perché passare 0 a void?), ma voglio > rimanere IT: qui viene usato come se avessi detto http piuttosto che > ftp, piuttosto che ed2k (il protocollo per emule)? Questo ha un senso... È appunto uno "pseudo protocollo". Il perché dell'esistenza di "void" è spiegato nel paragrafo "history" del link che ti ho dato prima: <http://en.wikipedia.org/wiki/Bookmarklet#History> Poi, non è che viene "passato" il valore zero: void non è una funzione, ma un operatore; e un operatore si aspetta almeno un operando. <https://developer.mozilla.org/en/JavaScript/Reference/Operators/void> >> Di dubbia utilità, ma formalmente corretto. > Quello che penso io l'utilità suppongo ce l'abbia: tu a cosa ti riferisci? Non ho capito l'utilità che vedi, cerco di spiegare che intendo con degli esempi. Casi comuni in cui vedi usare lo pseudo protocollo "javascript:": <a href="javascript:void(doSomething())"> E qui, va da sé, sappiamo che è più elegante, leggibile e gestibile usare un event handler. Spesso però ti trovi anche di fronte a questo: <a href="javascript:void(0)" onclick="doSomething()"> Dopo aver risposto all'evento click il browser segue quanto trova nell'attributo "href". Per evitare il cambio di location ogni tanto qualcuno scrive la bruttura di cui sopra che equivale a dire "non fare nulla". Tuttavia per non eseguire il cambio di location basta che il gestore di eventi restituisca un valore "false": viene annullata l'azione di default e siamo tutti contenti. <a href="#" onclick="doSomething(); return false"> L'unica cosa utile da fare a questo punto è avere invece qualcosa di significativo come attributo href: se JavaScript non fosse disponibile o attivato possiamo usare l'attributo href per avere un URL alternativo. Ipotizziamo di avere una funzione che sostituisce il riassunto di alcuni testi con i testi completi: <a href="complete_page.html" onclick="expandTexts();return false">Clicca per espandere tutti i testi</a> Chi ha JavaScript disattivato può comunque fruire del contenuto perché il browser visiterà la pagina da noi appositamente preparata. P.S. Ho messo gli event handler in attributi solo per semplicità, ma sarebbe meglio evitare di sporcare il codice di markup. A ognuno il suo: markup -> struttura css -> aspetto js -> comportamento Nel cercare di spiegarmi ho fatto, perdonami, notevoli digressioni. Un paio di link per approfondire cose che ho tirato in ballo: <http://en.wikipedia.org/wiki/Progressive_enhancement> <http://en.wikipedia.org/wiki/Unobtrusive_JavaScript> |
|
#5
|
|
|
|
|
On 20/02/12 14:52, Andrea Scartabelli wrote:
[...] >> onclick="nomeFunzione()" >> >> Ho sempre fatto così e ha sempre funzionato, almeno da IE6 in poi. >> Ora, come mai spesso trovo cose tipo >> >> onclick="javascript:nomeFunzione()" > > In breve: la forma che usi tu è corretta, l'altra errata ma i browser > ignorano generalmente l'errore. Con la brevità mi accorgo di essere stato impreciso: l'errore è concettuale non sintattico. I browser non segnalano errori perché la sintassi è formalmente corretta e "javascript:" viene inteso come una label dal parser. |
|
#6
|
|
|
|
|
Il 20/02/2012 16.23, Andrea Scartabelli ha scritto:
>>> Sarebbe formalmente corretto usare questo pseudo protocollo in attributi >>> in cui indichi un URL, come l'attributo "href" di un tag "a". >> ...infatti si vede spesso in href="javascript:void(0)". >> Lì si aggiunge un'altra domanda (perché passare 0 a void?), ma voglio >> rimanere IT: qui viene usato come se avessi detto http piuttosto che >> ftp, piuttosto che ed2k (il protocollo per emule)? Questo ha un senso... > > È appunto uno "pseudo protocollo". Una precisazione (abbastanza inutile): un protocollo viene riconosciuto dai browser con anche i due slash: http:// ftp:// ed2k:// |
|
#7
|
|
|
|
|
On 22/02/12 01:02 , Jax wrote:
> Una precisazione (abbastanza inutile): un protocollo viene riconosciuto > dai browser con anche i due slash: Non proprio. I due slash identificano l'hierarchical part di un URI, quello che definiamo "protocollo" è lo "scheme name" di tale URI. Un esempio di protocolli senza hierarchical part possono essere "mailto", "news" o "jar" ad esempio. Notare anche come `window.location.protocol` restituisca infatti lo scheme name (senza hierarchical part). |
|
#8
|
|
|
|
|
Il 22/02/2012 18.43, ZER0 ha scritto:
> Non proprio. I due slash identificano l'hierarchical part di un URI, > quello che definiamo "protocollo" è lo "scheme name" di tale URI. Un > esempio di protocolli senza hierarchical part possono essere "mailto", > "news" o "jar" ad esempio. > > Notare anche come `window.location.protocol` restituisca infatti lo > scheme name (senza hierarchical part). E c'hai ragione, c'hai. Precisazione inutile e pure sbagliata. Hovintoquacchecosa? |
|
#9
|
|
|
|
|
Guardando il dito o seguendo la luna, massic80 scrisse in
<4f424895$2>: > Ho sempre fatto così e ha sempre funzionato, almeno da IE6 in poi. > Ora, come mai spesso trovo cose tipo > > onclick="javascript:nomeFunzione()" > > ? Non me ne intendo, ma ricordavo questa discussione proprio quando m'e` capitato di trovare un form dove l'action in seguito ad un submit era proprio indicata con quella forma... Naturalmente non cambia il resto che e` gia` stato detto, ma un'utilita` per "javascript:" mi pare che la indichi... giusto? Ciao ciao Claudio |
|
#10
|
|
|
|
|
Coso wrote:
> Non me ne intendo, ma ricordavo questa discussione proprio quando m'e` > capitato di trovare un form dove l'action in seguito ad un submit era > proprio indicata con quella forma... Naturalmente non cambia il resto > che e` gia` stato detto, ma un'utilita` per "javascript:" mi pare che > la indichi... giusto? veramente l'action di una form andrebbe trattato come l'href di un a, e javascript dobrebbe essere invocato tramite l'attributo onsubmit, invece che onclick, ma con lo stesso /modus operandi/ Quindi, no, neanche in questo caso è corretto usare "javascript:" :D |
|
#11
|
|
|
|
|
Guardando il dito o seguendo la luna, Vito De Tullio scrisse in
<jj6d3h$njn$1>: > > Non me ne intendo, ma ricordavo questa discussione proprio quando m'e` > > capitato di trovare un form dove l'action in seguito ad un submit era > > proprio indicata con quella forma... Naturalmente non cambia il resto > > che e` gia` stato detto, ma un'utilita` per "javascript:" mi pare che > > la indichi... giusto? > > veramente l'action di una form andrebbe trattato come l'href di un a, e > javascript dobrebbe essere invocato tramite l'attributo onsubmit, invece che > onclick, ma con lo stesso /modus operandi/ > > Quindi, no, neanche in questo caso è corretto usare "javascript:" :D Capito! :-) E grazie per l'ottima spiegazione. Ciao ciao Claudio |
|
|
| Discussioni simili | |
| A che diavolo serve?!... Qualcuno sa spiegarmi a cosa SICURAMENTE serve il FET Q5 (con eventualmente l'annessa resistenza R18 da 10K sul suo drain) che si vede in questo schema?!... Si tratta di un... |
|
| [MacPro] Che diavolo di microfono serve? Ho provato con il microfono Apple che usavo sul G4 Sawtooth (che poi è lo stesso che acquistammo ai tempi del PM 6100/66) ma niente. Ho provato con un microfono da pochi... |
|
| dotazione PX4 storm ,a che diavolo serve quel...? Salve, nella conezione della PX4 storm é presente una specie di "bicchierino" in plastica blu tondo con all'interno il logo beretta...qualcuno di voi sa a cosa serve questo... |
|
| A che diavolo serve ??? (350D) Salve, stamattina stavo smaruzzando la mia 350D e mentre facevo delle provicchie con il flash il ditino è finito sul tastino " * " e la 350D ha sparato... |
|
|
Tutti gli orari sono GMT. Attualmente sono le 10:32. | Privacy Policy
|