rilevante


  rilevante > comp.lang.* > comp.lang.javascript

 #1  
20.02.2012, 12:20
massic80
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  
20.02.2012, 12:52
Andrea Scartabelli
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  
20.02.2012, 13:03
massic80
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  
20.02.2012, 14:23
Andrea Scartabelli
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  
20.02.2012, 16:31
Andrea Scartabelli
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  
22.02.2012, 08:02
Jax
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  
22.02.2012, 16:43
ZER0
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  
23.02.2012, 07:43
Jax
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  
05.03.2012, 18:25
Coso
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  
07.03.2012, 00:20
Vito De Tullio
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  
07.03.2012, 12:52
Coso
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