Newsgroup: it.comp.lang.javascript
Titolo: 2 domande veloci

Chi mi spiega perchč la funzione seguente non funziona?
Dovrebbe allineare in basso e centralmente un Layer che passo come
parametro, ma sembra non riuscire a fare le operazioni.
Probabilmente c'č qualche errore di sintassi, ma non riesco proprio a
trovarlo.
################################
function centra(Layer_id){
document.all[Layer_id].style.posLeft
=(document.body.clientWidth/2)-(document.all[Layer_id].width/2);
document.all[Layer_id].style.posTop
=(document.body.clientHeight-document.all[Layer_id].height-5);
}
###############################
Inoltre non riesco a dare l' alternativa su un case di uno switch del tipo:
se č rosso o se č nero fai queste operazioni.
Ho provato cosě:
function gino(){
switch(){
case "rosso || nero":
           .... istruzioni.....
// ho provato anche
case "rosso" || "nero"
Ma non funziona ugualmente.
Ciao e grazie .
Massimo

 se è rosso o se è nero fai queste operazioni.
Copia/incolla queste poche righe; il criterio lo capisci subito, e puoi
applicarlo ovunque:
  <html>
  <head>
  <script language="javascript">
var aa="rosso"; bb="nero"; cc="verde"; dd="azzurro"; 
cl=window.prompt("Inserisci il colore:","qui");
if (cl == aa || cl == bb || cl == cc || cl == dd) {    
  alert("Perfetto, il colore era " + cl);
  } else {
  alert("Sbagliato, il colore non e\' " + cl);
  }
 </script>
  </head>
  <body>
  </body>
  </html>
-- 
mailto: y = i
----------------------------------------
Vivo nel terrore di non essere frainteso 
(Oscar Wilde)

 applicarlo ovunque:
Ti ringrazio ma il mio problema e farlo funzionare in uno switch.
Ciao
Massimo

 Ti ringrazio ma il mio problema e farlo funzionare in uno switch.
Essendo un cosiddetto niubbo, non so se "switch" in javascript assume un
significato particolare, se e' un metodo, se e' un oggetto... o se e' un
semplice "scambio" (il che potrebbe voler dire una marea di cose). 
Hai possibilita' di mostrarmi l'intero codice? Magari m'ingegno per
capirlo e imparo qualcosa anch'io :-)



Il comando switch in javascript serve per evitare di dover ripetere 'n'
volte le condizoni quando si usa if e else.
Ok , questo è il codice in questone:
Ciao
Massimo
###################################################
<html>
<head><script language="JavaScript">
function Show(){
   var nav="";
   if(document.layers)
   nav="NN4x";
   if(document.all)
   nav="IE4x";
   if((document.getElementById) && (navigator.appName == "Netscape"))
   nav="NN6x";
   if((document.getElementById) && (navigator.appName == "Microsoft Internet
Explorer"))
   nav="IE5x";
   if((document.getElementById) && (navigator.appName == "Opera"))
   nav="OP5x";
   return nav;
}
function centra(Layer_id){
var  nav = Show();
 switch(nav){
  case "NN4x":
 document.layers['Layer_id'].width=300;
 document.layers['Layer_id'].pageX
=(window.innerWidth/2)-(document.layers['Layer_id'].width/2);
 document.layers['Layer_id'].height=40;
 document.layers['Layer_id'].pageY
=(window.innerHeight-document.layers['Layer_id'].height-5);
 break;
/* qui dovrei dire case: "IE4x || IE5x" ma non funzia cosi devo dare le
stesse istruzioni sia per IE4x che per IE5x*/
  case "IE4x":
        document.all[Layer_id].width=600;
 document.all[Layer_id].height=30;
 document.all[Layer_id].style.posLeft
=(document.body.clientWidth/2)-(document.all[Layer_id].width/2);
 document.all[Layer_id].style.posTop
=(document.body.clientHeight-document.all[Layer_id].height-5);
 break;
  case "IE5x":
        document.all[Layer_id].width=600;
 document.all[Layer_id].height=30;
 document.all[Layer_id].style.posLeft
=(document.body.clientWidth/2)-(document.all[Layer_id].width/2);
 document.all[Layer_id].style.posTop
=(document.body.clientHeight-document.all[Layer_id].height-5);
 break;
  case "NN6x":
 document.getElementById('Layer_id').width=300;
 document.getElementById('Layer_id').style.left
=(window.innerWidth/2)-(document.getElementById('Layer_id').width/2);
 document.getElementById('Layer_id').height=40;
 document.getElementById('Layer_id').style.top
=(window.innerHeight-document.getElementById('Layer_id').height-5);
 break;
 }
}
</script>
<title></title>
</head>
<div id="secondo" style="position:absolute; left:40px; top:370px;
width:640px; height:30px; visibility:visible; background:red;"></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="javascript:centra('secondo');">Centra</a></p>
</body>
</html>
#############################################################

 Ok , questo è il codice in questone:
Per me e' un po' difficilotto; nei prossimi giorni vedo se riesco a
capirci qualcosa. Da un primo sguardo noto che su IE fa il suo dovere,
mentre da Netscape 4.x non viene proprio visto.
Di nuovo :)


 ###################################################
Con Netscape (per Marco) non funziona perché ci sono degli apici, quindi 
"Layer_id" è una stringa e non una variabile (stesso errore per la sezione 
NN6x)
Quanto allo switch, credo che puoi risolvere cambiando la funzine Show(nav) in 
questo modo:
function Show(){
   var nav="";
   if(document.layers)    nav="NN4x";
   if(document.all)    nav="IE4x";
   if(document.getElementById) nav="NN6IE5";
   return nav;
}
Non ho a disposizione IE5 né NN6, ma leggendo vari mex nel NG (di Fabiano, 
pippopd, Carena, ed altri) mi è sembrato di capire che:
- NN6 equivale a IE5 perché tutti e due usano il nuovo DOM2 (e fin qui non ci 
piove! :-)
- OP5 può funzionare in modalità "MSIE compatibile".
Dunque, se non ho ragionato male, ti basta discernere fra: 
-- NN4
-- IE4
-- TUTTI GLI ALTRI.
Quindi la funzione centra() la potresti cambiare in questo modo:
function centra(Layer_id){
var  nav = Show();
 switch(nav){
  case "NN4x":
 document.layers[Layer_id].width=300;
 document.layers[Layer_id].pageX=(window.innerWidth/2)-
(document.layers[Layer_id].width/2);
 document.layers[Layer_id].height=40;
 document.layers[Layer_id].pageY=(window.innerHeight-
document.layers[Layer_id].height-5);
 break;
  case "IE4x":
        document.all[Layer_id].width=600;
 document.all[Layer_id].height=30;
 document.all[Layer_id].style.posLeft=(document.body.clientWidth/2)-
(document.all[Layer_id].width/2);
 document.all[Layer_id].style.posTop=(document.body.clientHeight-
document.all[Layer_id].height-5);
 break;
  case "NN6IE5x":
        document.all[Layer_id].width=600;
 document.all[Layer_id].height=30;
 document.all[Layer_id].style.posLeft=(document.body.clientWidth/2)-
(document.all[Layer_id].width/2);
 document.all[Layer_id].style.posTop=(document.body.clientHeight-
document.all[Layer_id].height-5);
 break;
 }
}
--------- 
Non ho a disposizione i browser avanzati (IE5/NN6/OPERA), quindi non ho 
provato, ma per NN4 ed IE4 mi sembra che vada.
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
              All the JavaScript you need
------------------------------------------------------------------------
               Nessun traguardo è abbastanza lontano.
------------------------------------------------------------------------

 Ciao, Riccardo
Il trend si è allungato parecchio e perciò il discorso si e un po'
incasinato, comunque riassumendo:
- su un case di uno switch non si possono inserire operatori booleani
- per quanto riguarda la mia prima domanda (che riporto qui sotto) ancora
nessuna risposta
Chi mi spiega perchè la funzione seguente non funziona?
Dovrebbe allineare in basso e centralmente un Layer che passo come
parametro, ma sembra non riuscire a fare le operazioni.
Probabilmente c'è qualche errore di sintassi, ma non riesco proprio a
trovarlo.
################################
function centra(Layer_id){
document.all[Layer_id].style.posLeft
=(document.body.clientWidth/2)-(document.all[Layer_id].width/2);
document.all[Layer_id].style.posTop
=(document.body.clientHeight-document.all[Layer_id].height-5);
}
###############################
Grazie a tutti per l'interessamento.
Ciao
Massimo

 Massimo
OK OK OK.
Siccome il problema mi stava veramente sulle b@alle, sono tornato a
spulciarmi piů aproffonditamente quelle miniera di risorse che sono le FAQ
di JsDir e finalmente ho trovato:
Per rilevare altezza e larghezza di un DIV il comando giusto non e
document.all[Layer_id].width  (che se non erro serve per impostare la
larghezza)
ma
document.all[Layer_id].clientWidth  (per IE4x e IE5x)
Perciň anche questo č risolto.
Ciao a tutti
Massimo