Newsgroup: it.comp.lang.javascript
Titolo: Intercettare il bottone Annulla di una PROMPT

Un saluto a tutti,
ho bisogno di intercettare l'evento associato al click effettuato sul 
bottone "Annulla" (cancel) di una finestra "PROMPT" per evitare che mi 
restituisca un NaN.
Cercando su Internet ho letto che la pressione di "Annulla" restituisce 
una stringa vuota, ma usando questa espressione:
[CUT]
var altroValore = prompt(\'Inserisci un numero.\',\'Scrivi qui...\');
if (isNaN(altroValore) || altroValore == \'\')
[CUT]
Sapete dirmi se e dove sto sbagliando ?
Grazie.
	wolfenstein

 if (isNaN(altroValore) || altroValore == \'\')
Perche' usi le sequenze di escape? Sei dentro una stringa?
Il codice che hai scritto, eliminando gli escape, funziona:
var altroValore = prompt("Inserisci un numero.","Scrivi qui...");
if (isNaN(altroValore)||altroValore == ""){
	alert("dato non valido");
}
-- 
ZER0://coder.gfxer.web-designer/
~ Ci siamo fatti una scopata cosi' eccezionale che anche i vicini hanno
fumato una sigaretta.

 }
Io devo "necessariamente" utilizzare gli escape poichè mi trovo a 
scrivere codice dentro una funzione onchange all'interno di una FORM.
Ogni suggerimento è il benvenuto.
			Wolfenstein

 scrivere codice dentro una funzione onchange all'interno di una FORM.
Certo, ma se provi lo script vedrai che funziona. Ergo non e' il codice ad
essere sbagliato, non e' un discorso di intercettare o meno il bottone
annulla o il suo valore di ritorno; bensi' sono le sequenze escape a creare
problema.
Probabilmente hai fatto un po' di confusione fra l'uso di apici e doppi
apici nel *constesto*, non nel codice in se'. Quello, come hai visto,
funziona.
-- 
ZER0://coder.gfxer.web-designer/
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 funziona.
Nessuna confusione, tantomeno errori negli apici.
La sintassi da usare era la seguente:
if (isNaN(altroValore) || altroValore == null) <==== CODICE CORRETTO
{alert(\'Valore inserito non congruo\');
Dunque bisognava passargli "null".
Grazie lo stesso per l'aiuto.
	wolfenstein

 if (isNaN(altroValore) || altroValore == null) <==== CODICE CORRETTO
Il controllo fallisce nel caso un utente scriva un valore vuoto.
-- 
ZER0://coder.gfxer.web-designer/
~ "Compiere l'impossibile e' impresa che risiede nel cuore degli uomini"
(Mariners and generals)

 Il controllo fallisce nel caso un utente scriva un valore vuoto.
Hai pienamente ragione.
Infatti adesso mi sto scervellando per capire come ovviare, ad esempio, 
se un utente mi digita N caratteri "space". :-(
Se hai qualche dritta sei il benvenuto.
Tanti saluti.
	wolfenstein

 se un utente mi digita N caratteri "space". :-(
Te la scrivo a mente, spero di non fare errori come stamani :)
Se aggiungi questo in testa ai tuoi script:
String.prototype.isEmpty=function(){return this.replace(/\s/g).length==0);}
Aggiungi di conseguenza un metodo a tutti gli oggetti stringa, e quindi
puoi fare:
if (isNaN(altroValore) || altroValore==null || altroValore.isEmpty() )
(ovviamente isEmpty ti restituisce true in caso che la stringa sia vuota,
false in caso contrario).
-- 
ZER0://coder.gfxer.web-designer/
~ "Nei film americani, qualsiasi problema che venga considerato
sufficientemente catastrofico, puo' essere risolto facendo esplodere uno
o piu' ordigni nucleari" (ZER0 & Cosimo)

 false in caso contrario).
Così facendo impedisco l'invio di una stringa vuota.
E va benissimo! :-)
Resta però da bloccare l'inserimento di uno o più caratteri "space".
Io ho aggiunto un'istruzione:
|| altroValore == String.fromCharCode(32)
riuscendo ad intercettare l'inserimento di uno "spazio".
Resta però da prevenire l'inserimento di N spazi.
Alla disperata potrei aggiungere un certo numero di istruzioni:
|| altroValore == String.fromCharCode(32,32)
|| altroValore == String.fromCharCode(32,32,32)
|| altroValore == String.fromCharCode(32,32,32,.....)
ma non mi sembra molto elegante. :-(
Grazie per l'aiuto.
	wolfenstein

wolfenstein ha scritto:
[ CUT ]
Ho risolto !!!
E' bastato inserire questa funzione trovata su Internet:
function trim(s) {
   while (s.substring(0,1) == ' ') {
     s = s.substring(1,s.length);
   }
   while (s.substring(s.length-1,s.length) == ' ') {
     s = s.substring(0,s.length-1);
   }
   return s;
}
e tutto è andato a posto.
Sia benedetta Internet.
Ed adesso ho contemplato tutti gli input dell'utente. 8-)
Tanti saluti.
	wolfenstein

 Resta però da bloccare l'inserimento di uno o più caratteri "space".
Tale metodo copre anche quel caso non preoccuparti. Altrimenti, sarebbe
bastato un semplice altroValore=="".
Ovviamente prima non lo copriva per il semplice fatto che la funzione era
incompleta.
-- 
ZER0://coder.gfxer.web-designer/
~ Una mente perversa e' un peccato sprecarla.
(A dirty mind is a terrible thing to waste)

 Sia benedetta Internet.
Ci si trova di tutto. Il che significa anche spazzatura. Si deve stare
attenti a quel che si recupera :)


 incompleta.
Eppure, aggiungendo una parentesi ( davanti a: "this.replace..." a me 
funzionava
P.S.: Non chiedermi il perchč ;-)
Di nuovo grazie.
	wolfenstein