Newsgroup: it.comp.lang.javascript
Titolo: oggetto document e window

ciao a tutti. mi trovo di fronte un problema molto strano.. ho il 
seguente codice:
var risultato=0;
 
a=parseInt(document.form1.f1.value);
b=parseInt(document.form1.f2.value);
c=parseInt(document.form1.f3.value);
d=parseInt(document.form1.f4.value);
e=parseInt(document.form1.f5.value);
f=parseInt(document.form1.f6.value);
g=parseInt(document.form1.f7.value);
risultato=parseInt((a+b+c+d+e+f)-72); //p.s.= ma questo parseInt non ï¿œ 
inutile?
cmq con exlorer il risultato ï¿œ NaN, con ff funziona normalmente.
Cosa posso fare?
Grazie a tutti e buon weekend!

Merlink ha scritto:

stavo pensando... il numero di "risultato" va da -72 a 0. E' quindi 
possibile che explorer vedendo un numero col segno negativo davanti 
abbia qualche problema in questo senso?
rinnovo i ringraziamenti e i saluti a tutti ;-)

Merlink ha scritto:

PRECISAZIONE:
con questo codice, poco piï¿œ sotto
alert('Il totale ('+risultato2+') supera di '+parseInt(risultato)+' il 
limite consentito(72). ');
al posto dei risultati mi vien scritto NaN

Merlink ha scritto:

PRECISAZIONE:
con questo codice, poco piï¿œ sotto
alert('Il totale ('+risultato2+') supera di '+parseInt(risultato)+' il 
limite consentito(72). ');
al posto dei risultati mi vien scritto NaN con l'explorer.

 posso fare?
verificare quali sono i valori e cosa hanno di "strano", perché quanto 
sopra (a parte quanto già detto) mi sembra corretto.

 abbia qualche problema in questo senso?
direi di no

Cristiano Larghi ha scritto:

ho fatto così:
a=parseInt(document.form1.f1.value, 10);
specificando la base dati, ma non mi funziona ancora con explorer...
può essere che con MSIE debba mettere "window", anzichè "document"?

Cristiano Larghi ha scritto:

a me sembra un pò un problema di browser.. googlando un pò ho letto da 
qualche parte che explorer utilizza js piuttosto che javascript. magari 
devo omettere <script language="javascript"> e mettere solo <script>? o 
caricare dinamicamente in base al browser <script="js">? non mi spiego 
al meglio data la mia scarsità in javascript, però ci terrei a risolvere 
il problema, perchè è scocciante che su ff funzioni e si ie no. devo per 
forza fare due pagine distinte? Avevo in mente qlcosa di cross-browser...
Grazie ancor aper l'aiuto!
ciao!

 cross-browser...
senza vedere il codice completo direi che è difficile aiutarti. IE che 
errore segnala? Riesci a capire in quale linea? Mettendo un alert dopo 
ogni riga a che punto segnala errore?

 essere che con MSIE debba mettere "window", anzichè "document"?
no. Al massimo puoi provare con la sintassi estesa, ma non vedo il perché 
(document.forms['form1'].elements['f1].value). (form1 è il name della 
form, e f1 il name del tag input-select).

Merlink ha scritto:

se provi a sostituire parseint con Number, hai errore?

Cristiano Larghi ha scritto:

Ciao. Ho trasformato il codice in questo modo, ma sembra che Explorer 
non ne voglia proprio sapere...
Ho provato con firefox e google chrome. Non ho ancora provato con opera, 
  ma temo che non sia molto diverso dai primi due.. secondo me è 
qualcosa in explorer che non funzia. C'è un metodo per testare la 
compatibilità? sto usando explorer 8, con Vista... Ma anche impostando 
la compatibilità con explorer 7 non funzia lo stesso..
E' estenuante cercare un errore che non c'è..
Pensa che la funzione con il browser MS funziona in parte. Quando clicco 
sulla select 'affitto' lui mi imposta in modo corretto il valore 
dell'affitto nell'input box realtiva.
La parte che non funziona è proprio quella della somma dei totali, l'alert
/*
alert('Il totale ('+risultato2+') supera di '+parseInt(risultato, 10)+' 
il limite consentito(72). ');
		document.form1.tot.value=0;
*/
me la visualizza ma al posto dei valori mi scrive "NaN". Il calcolo non 
viene effettuato perchè secondo lui non sono numeri!!! Mentre per gli 
altri browser si! Non so più che pesci prendere...
Ecco il codice completo della funzione che sto usando, considera che la 
lancio ogni evento onChange degli elementi del form.
function calcolaTotale(l){
		/* funzione che calcola il totale delle caratteristiche dell'avatar.*/
 
		var l; //L = valore l della classe.
 
		if(isNaN(l)){l=1;}//se l non è un numero (xkè non arriva il dato da 
db) gli assegni il valore 1!
		//sostituire 100 col valore massimo del dado, se necessario:
		var numero_casuale=Math.floor(Math.random()*100+1);
		var valoreInedia=0;
		var valoreStress=0;
		var risultato=0;
		var risultato2=0;
 
		a=parseInt(document.forms['form1'].elements['forza'].value, 10);
		b=parseInt(document.forms['form1'].elements['destrezza'].value, 10);
		c=parseInt(document.forms['form1'].elements['costituzione'].value, 10);
		d=parseInt(document.forms['form1'].elements['intelligenza'].value, 10);
		e=parseInt(document.forms['form1'].elements['saggezza'].value, 10);
		f=parseInt(document.forms['form1'].elements['carisma'].value, 10);
		g=parseInt(document.forms['form1'].elements['denaro'].value, 10);
		h=parseInt(document.forms['form1'].elements['dimCube'].value, 10);
 
		risultato=parseInt((a+b+c+d+e+f)-72, 10);
		risultato2=parseInt((a+b+c+d+e+f), 10);
		valoreInedia=(a*c)+10;
		valoreStress=(c*d)+15;
		valoreCaBase=(10+b);
		valoreAtkBase=(10+a);
 
		switch(h){
			case 2:
				affittoCubo=20;
			break;
			case 4:
				affittoCubo=40;
			break;
			case 6:
				affittoCubo=60;
			break;
			default: affittoCubo=2;
		}
		/*alert(parseInt(risultato)+"è un numero intero!");*/
		document.form1.affitto.value=parseInt(affittoCubo, 10)+' CRiV / Mese';
 
		var denaro=parseInt( ( (l*d)+parseInt(numero_casuale, 10) )*10, 10 );
		if((d>1)&&(parseInt(g, 10)<=0)&&(parseInt(risultato2, 10)<72)){
		alert("Ti è stato riconosciuto: "+denaro+" CRiV = ("+l+"x"+d+"+ 
1d100["+numero_casuale+"]) x 10)");
		document.form1.denaro.value=parseInt(denaro, 10);
		}
		/*calcola il totale di tutte le caratteristiche: */
		if(parseInt(risultato, 10)<=0){
		document.form1.tot.value=parseInt(risultato, 10);
		}
		else{
		alert('Il totale ('+risultato2+') supera di '+parseInt(risultato, 
10)+' il limite consentito(72). ');
		document.form1.tot.value=0;
		}
		/*calcola il valore dell'inedia: */
		if(valoreInedia>10){
		document.form1.inedia.value=valoreInedia;
		}
		/*calcola il valore dello stress: */
		if(valoreStress>15){
		document.form1.stress.value=valoreStress;
		}
		if(valoreCaBase>10){
		document.form1.ca.value=valoreCaBase;
		}
		if(valoreAtkBase>10){
		document.form1.atk.value=valoreAtkBase;
		}
 
}

michelangelo giacomelli ha scritto:

Ho fatto cosï¿œ:
a=Number(document.forms['form1'].elements['forza'].value, 10);
		b=Number(document.forms['form1'].elements['destrezza'].value, 10);
		c=Number(document.forms['form1'].elements['costituzione'].value, 10);
		d=Number(document.forms['form1'].elements['intelligenza'].value, 10);
		e=Number(document.forms['form1'].elements['saggezza'].value, 10);
		f=Number(document.forms['form1'].elements['carisma'].value, 10);
		g=Number(document.forms['form1'].elements['denaro'].value, 10);
		h=Number(document.forms['form1'].elements['dimCube'].value, 10);
AZZ era proprio questo michelangelo!! Grazie, Grazie, Grazie 1000000 
volte Grazie!!!!
Qualcuno sa spiegarmi anche la differenza tra Number e parseInt? cosï¿œ 
magari posso scegliere cosa usare la prossima volta.
Ciao a tutti!

michelangelo giacomelli ha scritto:

se metto Number in questo modo:
		a=Number(document.forms['form1'].elements['forza'].value);	 
b=Number(document.forms['form1'].elements['destrezza'].value);	 
c=Number(document.forms['form1'].elements['costituzione'].value);	 
d=Number(document.forms['form1'].elements['intelligenza'].value);	 
e=Number(document.forms['form1'].elements['saggezza'].value);	 
f=Number(document.forms['form1'].elements['carisma'].value);	 
g=Number(document.forms['form1'].elements['denaro'].value);	 
h=Number(document.forms['form1'].elements['dimCube'].value);
Non mi appare nemmeno piï¿œ l'alert che dovrebbe apparire con questo codice:
if(Number(risultato, 10)<=0){
	document.form1.tot.value=Number(risultato);
}
else{
	alert('Il totale ('+risultato2+') supera di '+Number(risultato)+' il 
limite consentito(72). ');
document.form1.tot.value=0;
}
il valore mi rimane "-72" nell'input box che dovrebbe visualizzarmi il 
totale dei punti rimanenti..

michelangelo giacomelli ha scritto:

se metto Number in questo modo:
a=Number(document.forms['form1'].elements['forza'].value); 
b=Number(document.forms['form1'].elements['destrezza'].value); 
c=Number(document.forms['form1'].elements['costituzione'].value); 
d=Number(document.forms['form1'].elements['intelligenza'].value); 
e=Number(document.forms['form1'].elements['saggezza'].value); 
f=Number(document.forms['form1'].elements['carisma'].value); 
g=Number(document.forms['form1'].elements['denaro'].value); 
h=Number(document.forms['form1'].elements['dimCube'].value);
Non mi appare nemmeno piï¿œ l'alert che dovrebbe apparire con questo codice:
if(Number(risultato)<=0){


Merlink ha scritto:

EUREKA!!!!
Il problema sta nelle select!!
Per la maggior parte dei browser, puoi scrivere:
<option>Pippo</option>
anzichï¿œ
<option value="Pippo">Pippo</option>
e interpretaranno il valore tra i tag di apertura e chiusura dell'option 
come se fosse il valore della option stessa. Explorer NO!
per lui vale solo la seconda opzione, cioï¿œ quella di scrivere il valore 
con value="valore". Per questo non mi considerava i numeri, non riceveva 
i valori.
Infatti, nella select dimCubo, avevo impostato i valori oltre alle 
"etichette" ed era l'unica che funzionava!!
Grazie a tutti per l'aiuto, ho cmq imparato un pï¿œ di cose da questo caso!!
Ciao a tutti, alla prossima!!

 i valori.
Però ti avevo detto di mettere un alert dopo ogni riga per vedere i 
valori, se lo avessi fatto lo avresti scoperto subito ...
Ricordo una discussione simile in passato; le specifiche dicono che ha 
ragione firefox:
 
http://www.w3.org/TR/html401/interact/forms.html#edef-OPTION
"value = cdata [CS]
    This attribute specifies the initial value of the control. If this 
attribute is not set, the initial value is set to the contents of the 
OPTION element"

Merlink ha scritto:

posta tutto il codice

Merlink ha scritto:

oppure puoi usare .text

 - FAQish topics, acronyms, & links.
 Proper <= 4-line sig. separator as above, a line exactly "-- " (SonOfRFC1036)
 Do not Mail News to me. Before a reply, quote with ">" or "> " (SonOfRFC1036)