Newsgroup: it.comp.lang.javascript
Titolo: [DOM]Errore: Previsto oggetto

Salve.
Sto facendo degli esperimenti con JavaScript, una funzione molto
semplice che dovrebbe rendere (in)visibile un certo DIV in base alla
classe CSS attiva in quel momento.
Prima ho avuto un problema di assegnamento, risolto cambiando il modo di
referenziare la stringa, prima usavo ""stringa"" ora uso 'stringa' e
quell'errore č sparito.
La mia funzione č questa:
function ChangeSquare( qst,answ )
{
   if (qst.class = "squareon")
   {
     qst.class = "squareoff";
     document.getelementbyname(answ).style.visibility = "hidden";
   }
   else {
          qst.class = "squareon";					
          document.getelementbyname(answ).style.visibility = "visible"; 
        }
}
Questo invece č il tag dove la richiamo:
<div class = "questionbox">
   <div class="squareon" onclick="ChangeSquare(this,'answ1')">
    +
   </div>
   Question
</div>
A questo punto mi dice: previsto oggetto ma, da quello che ho
letto, "this" dovrebbe essere proprio quello, cioč un oggetto,
anzi, dovrebbe essere proprio l'oggetto DIV desiderato.
Leggendo su W3Schools, gli esempi passano le stringhe usando l'apice 
singolo( ' ) mentre in questo messaggio su Google Groups:
http://groups.google.com/group/it.comp.lang.javascript/browse_frm/thread/5939e484cde4fe7f/4079155e09c162ca?lnk=st&q=%22previsto+oggetto%22+javascript&rnum=1#4079155e09c162ca
(occhio al wrap)
viene consigliato l'apice doppio... il problema č che essendo dentro un 
tag, l'apice singolo mi sembra foriero di meno problemi rispetto al 
doppio(che a sua volta poi dovrei raddoppiare?).
Qualcuno puň diradare i miei dubbi e magari dirmi dove sbaglio?
Saluti,
Andrea

 viene consigliato l'apice doppio...
Vanno bene sia l'uno che l'altro, non è quello il problema. Temo che il/i
problema/i sia/no da qualche altra parte.
-- 
Nando [?]
Apostolo della Prova

 problema/i sia/no da qualche altra parte.
Le modifiche fatte dovrebbero aver migliorato di molto la situazione,
anche se continua a propormi lo stesso, laconico, errore.
Saluti,
Andrea

 provo.
Gh... un paio d'occhiali in piů mi servono, ce l'avevo sotto il naso,
menu "Strumenti"... -.-
Vabbeh, comunque ho salvato la pagina e mi indica questi errori:
Errore: Selettore atteso.  Insieme di regole ignorato a causa del 
selettore errato.
La riga a cui si riferisce č il tag "script"... emmiiiiiiii...
Oggi sto particolarmente sbadato. Avevo un tag </style> nel posto
sbagliato. Risolto anche quello.
Adesso *continua* a darmi un errore alla riga dove ho messo
(correttamente, stavolta...) il tag </style>.
Ok, adesso ho una pletora di errori... li riporto con il
codice "adiacente", cosě per dare una impressione piů
completa di tutto(tra parentesi la riga col problema):
Errore: Selettore atteso.  Insieme di regole ignorato a causa del 
selettore errato(</style>).
<style type="text/css">
<!--
   body{width: 90%;}
   .squareon{background-color: yellow;float: left;color: black;}
   .squareoff{background-color: white;float: left;color: black;}
   .questionbox{float: left;background-color: black;color: white;
                width: 100%}
   .answerbox{float:left;border: thin solid;border-color: black;
              width: 100%;}
-->
</style>
Poiché i successivi fanno tutti riferimento allo stesso blocco di
tags ecc, li riporto tutti qui con tra parentesi la sorgente del
problema indicato dalla JavaScript Console.
Errore: Selettore atteso.  Insieme di regole ignorato a causa del 
selettore errato( ultima } ).
Errore: Fine del file inattesa durante la ricerca di chiusura } di un 
insieme di regole non valido(</script>).
Errore: document.getelementbyID is not a function.
<script type="text/javascript">
<!--
   function ChangeSquare( qst,answ )
   {
     if (qst.className == "squareon")
     {
       qst.className = "squareoff";
       document.getelementbyID(answ)[0].style.visibility = "hidden";
     }
     else {
            qst.className = "squareon";
            document.getElementByID(answ)[0].style.visibility =
                 "visible";
          }
   }
// -->
</script>
Poi ci sono alcuni stranissimi errori relativi a GoogleSyndication che 
non ho capito cosa hanno a che fare con la mia pagina O_o.
Qui sotto, il listato *completo e non formattato* di come viene
parsato il sorgente(tutto). Lo riporto non formattato perché il
problema potrebbe essere anche lě:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
">
<html xmlns="
http://www.w3.org/1999/xhtml
">
<head>
<title>Test page</title>
<style type="text/css">
<!--
   body{width: 90%;}
   .squareon{background-color: yellow;float: left;color: black;}
	.squareoff{background-color: white;float: left;color: black;}
	.questionbox{float: left;background-color: black;color: white;width: 100%}
	.answerbox{float:left;border: thin solid;border-color: black;width: 100%;}
-->
</style>
<script type="text/javascript">
<!--
   function ChangeSquare( qst,answ )
	{
	  if (qst.className == "squareon")
		{
		  qst.className = "squareoff";
		  document.getelementbyID(answ)[0].style.visibility = "hidden";
		}
		else {
		       qst.className = "squareon";
					 document.getElementByID(answ)[0].style.visibility = "visible";
		     }
   }
// -->
</script>
</head>
<body>
   <div class = "questionbox">
	  <div class="squareon" onclick="ChangeSquare(this,'answ1')">
		  +
		</div>
		Question
	</div>
	<div class="answerbox" id="answ1">
	  Answer
	</div>
</body>
</html>
Urgh... qualche idea? -.-'
Saluti e grazie per l'aiuto fornito finora(spero mi
aiutiate a risolvere... faccio del mio meglio ma sono un
novellino con JavaScript).
Andrea

Chiudendo FireFox e riaprendolo, scompaiono tutti gli errori di 
GoogleSyndication(cosa c'entravano non lo so) ma continua a dirmi:
Errore: document.getElementByID is not a function
Boh... eppure qui:
http://www.w3schools.com/htmldom/met_doc_getelementbyid.asp
sembra indicare chiaramente che tale funzione esis... eh ma
sono un cretino oggi... gh... mi sono accorto che avevo
lasciato la definizione di array([0]) quando avevo provato ad
usare la getElementsByName... sigh... adesso la JavaScript
console non mi dà più errori, però il box answer non scompare al
click, anche se la classe viene cambiata correttamente.
Questi sono i pezzi rilevanti(e formalmente ok) della pagina:
function ChangeSquare( qst,answ )
{
   if (qst.className == "squareon")
   {
     qst.className = "squareoff";
     document.getElementByID(answ).style.visibility = "hidden";
   }
   else {
          qst.className = "squareon";
          document.getElementByID(answ).style.visibility = "visible";
        }
}
<div class = "questionbox">
   <div class="squareon" onclick="ChangeSquare(this,'answ1')">
    +
   </div>
   Question
</div>
<div class="answerbox" id="answ1">
   Answer
</div>
Che cosa sto sbagliando?
Andrea

 Che cosa sto sbagliando?
Scusa il ritardo, stavo smanettando su alcune cosette mie ^_^
Allora, ad occhio direi che l'errore sta nel fatto che la funzione si
chiama
  getElementById
e non 
  getElementByID
L'ultima "d" deve essere minuscola: javascript è case-sensitive.
Riguardo alla console javascript di FireFox... ti segnala gli errori di
*tutte* le pagine che visiti, fino a che non la "pulisci" (pulsante
"svuota") o chiudi il browser.


 "svuota") o chiudi il browser.
Permettimi di dissentire... FireFox 1.5.0.1.
Avvialo.
Tieni aperto un editor HTML, con un file caricato
dentro.
Naviga fino al file HTML, e visualizzalo nel browser.
Modifica il file e salvalo.
Refresh nel browser.
Et voilà!
Riprodotto?
Grazie dell'aiuto finora fornito(un ultimo passettino...),
Andrea

 Permettimi di dissentire... FireFox 1.5.0.1. [...]
Guarda, l'unica che mi viene in mente è che magari hai una qualche plug-in
o add-on o come cappio si chiamano, tipo, che so, una google toolbar o
simili, la quale utilizza il motore javascript di Firefox e fa sì che
compaiano quegli errori che dici. Perché a me (FF 1.5.0.1) non succede :)


 compaiano quegli errori che dici. Perché a me (FF 1.5.0.1) non succede :)
Non ho installato *coscientemente* nulla del genere... indagherň.
Ciao,
Andrea

 Qualche URL dove fare letture interessanti? :D
Le reference... ZER0 docet :)
- per i browser Gecko: 
http://tinyurl.com/bztos
- per explorer: 
http://tinyurl.com/1tri


 Vabbeh che è sera, sono giustificato? :P
Quindi direi che sei più che giustificato, o ti è esploso qualche razzo
sperimentale? :)
(*1) C# escluso. Java non so.
(*2) Finora non ricordo di aver fatto qualcosa di simile, ne ho fatti di
peggiore LOL!
Ro!

 Javascript, come molti linguaggi ha una scarsa sicurezza dei tipi
Javascript non č assolutamente fortemente tipizzato, che sicurezza vuoi
avere :)
Inoltre quella sintassi lě č del tutto valida - non solo, utile -  ma
vuol dire semplicemente una cosa diversa; non vedo in che ottica
c'entrino i tipi in quel caso: di stringhe sempre parliamo, sia in
assegnazione che durante la comparazione.
Anyway, alcuni programmatori in tal caso preferiscono usare sintassi del
genere, per scongiurare errori del genere (piů per distrazione, credo,
che per altro.. ma a me sinceramente non č mai capitato):
if ( "squareon" = qst.class ){
..
}
In questo modo, se come nell'esempio canniamo un "=", dovremmo essere
avvertiti senza troppi complimenti, appena tenta di eseguire lo
statement.
Del resto, ricordiamoci che "un computer č fondamentalmente stupido. Non
fa quel che vuoi che faccia, ma quel che gli dici di fare."
-- 
"When you have eliminated the impossible, whatever remains, 
however improbable, must be the truth."