Newsgroup: it.comp.lang.javascript
Titolo: Bloccare click su un controllo dopo il primo

Ciao.
Vorrei disabilitare un controllo subito dopo il click
del mouse per evitare invii multipli della pagina.
Ma permettendo che scateni l'evento.
Ho provato con:
function DisableAfterClick(){
    this.disabled = true;
    return true;
}
ma viene bloccato prima che venga gestito il click.
Come posso fare?
Grazie,
Matteo Migliore. 

 del mouse per evitare invii multipli della pagina.
Mettilo nella onclick come prima riga della function...no?
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 Mettilo nella onclick come prima riga della function...no?
Non ho capito :-)
Per associare la funzione al controllo utilizzo questa sintassi:
----------------------------------------
var image = document.getElementsByTagName("img");
for (var i = 0; i < inputimage.length; i++){
cType = inputimage[i].type;
if (cType == "image"){
inputimage[i].onclick = onclick_inputimage;
}
}
function onclick_inputimage(){
this.disabled = true;
return true;
}
----------------------------------------
Mi sono accorto però che già associando all'evento
onclick la funzione non viene più scatenato il submit,
anche senza this.disabled = true.
?
Matteo Migliore.

 anche senza this.disabled = true.
E quindi il disabled non c'entra...
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

 E quindi il disabled non c'entra...
Credo di no.
Grazie!
Matteo Migliore. 

 Viene visualizzato il messaggio :-).
E allora scusa ma non capisco proprio...
se metti l'alert funziona, il this.disabled non c'entra (quel this dentro
la function mi puzza molto, ma dici appunto che questo problema si verifica
anche senza)....qual è allora il problema? 


 anche senza)....qual è allora il problema?
Che non viene scatenato il postback (diremmo sul ng di 
asp.net
 :-)).
Io invece voglio evitare che finchè la pagina viene inviata
al server l'utente possa continuare a cliccare sul pulsante.
Matteo Migliore. 

 Che non viene scatenato il postback (diremmo sul ng di 
asp.net
 :-)).
Eh, non so come viene scatenato il postback con le diavolerie di net (io lo
faccio manualmente).
In generale <input ... onclick="this.disabled='true'"> funziona
correttamente.


 correttamente.
Ops.
Adesso che mi ci fai pensare per generare il postback vengono aggiunta una
o più funzioni (a seconda se ci sono validatori etc...).
Sovrascrivendo l'evento con la funzione onclick_inputimage il resto non 
viene
eseguito.
A questo punto la domanda è:
come posso accodare la mia funzione all'evento onclick?
Matteo Migliore.

 come posso accodare la mia funzione all'evento onclick?
Boh
lato server con addEventHandler? (la ho sparata alla grassa...)
-- 
"e mai che mi sia venuto in mente
 di essere piů ubriaco di voi
 di essere molto piů ubriaco di voi"
									  F.D.A.

 lato server con addEventHandler? (la ho sparata alla grassa...)
No no, io parlo sempre di javascript.
Bisogna di nuovo richiedere l'intervento di Zer0 :-) ?
Matteo Migliore. 

 Bisogna di nuovo richiedere l'intervento di Zer0 :-) ?
Prova...io chiederei nel newsgroup di .net perché di risposte simili ne ho
viste parecchie (anche se non mi interessano e quindi non ricordo
assolutamente la risposta).
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 assolutamente la risposta).
Visto che ti ho rubato anche troppo tempo se vuoi chiudiamo
il thread :-).
In ogni caso .NET non c'entra, io volevo sapere come fare ad eseguire
ciò che già si trova nell'evento onclick del controllo e
in più accodare la mia funzione.
Utilizzo il sistema di separazione del codice script però
quindi il problema è lì.
Suppponiamo tu abbia un codice html del tipo:
<input id="i" type="image" onclick="alert('i clicked')"> e voglia
aggiungere via javascript, quindi senza modificare la signature dell'evento
(senza aggiungere quindi <input id="i" type="image" onclick="alert('i 
clicked'); clickAnother()">),
la funzione clickedAnother().
Saresti in grado?
Se vuoi chiudere il thread non ti preoccupare.
Matteo Migliore.

 il thread :-).
[CUT]
Avevo capito quello che chiedevi, solo che IMHO non č fattibile via
javascript (un oggetto.onclick+=funzione non penso proprio possa
funzionare).
Se ricordo bene infatti nel newsgroup di .net indicavano di sostituire con
la propria function e di richiamare alla fine la function di __postback (o
simile).
Perň Zer0, come dici te, potrebbe smentire.
Te la sparo: cerca un po' addeventhandler javascript nei newsgroup in
google, potresti trovare qualcosa di interessante (ma da qua a diventare
cross-browser non so proprio aiutarti).
 Cosě al volo ho trovato questo (vista in 2 secondi, mi sembra di aver
visto un document.all => solo IE): 
http://makeashorterlink.com/?O25F54FBA
Vedi un po' perché sto scappando (e non penso proprio di riuscire a leggere
il newsgroup prima di Martedě).
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 il newsgroup prima di Martedì).

Cristiano,
utilizzando disabled='true' la pagina non viene inviata.
Avresti una soluzione alternativa?
Grazie,
Matteo Migliore.


 Avresti una soluzione alternativa?
readOnly ?
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

 <input id="i" type="image" onclick="alert('i clicked')"> 
[..]
Questa non è "separazione del codice". La separazione del codice è questa:
<input type="image" id="i" />
e poi aggiungi da js dinamicamente l'event handler.
-- 
ZER0
~ The Tangent Universe collapsed 5995 days, 3 hours and 36 minutes ago.

 utilizzando disabled='true' la pagina non viene inviata.
Devi impostare il disabled dell'oggetto che fa il submit nell'event handler
"onsubmit" della form. Non nell'oggetto stesso che lo scatena.
Il workflow dovrebbe essere il seguente:
1) Tramite UI l'utente fa il submit della form.
2) Con il gestore onsubmit si richiama una funzione che controlla la
coerenza delle informazioni prima di inviarle.
3) Se il controllo fallisce, si previene l'invio restituendo al gestore
onsubmit "false".
4) Altrimenti, si imposta a disabled la parte dell'UI designata al submit e
si restituisce al gestore "true".
Ovviamente dal passo 2, siamo all'interno della funzione definita
nell'onsubmit.
-- 
ZER0
~ The Tangent Universe collapsed 5995 days, 3 hours, 41 minutes and 16 seconds ago.