Newsgroup: it.comp.lang.javascript
Titolo: problema al passaggio varialbili

Ho uno due script di questo tipo
function{
//istruzioni
check();
}
function check()
{
var x = document.registrazione.txtnome_utente.value
var y = document.registrazione.txtpass.value
 if (x.length < 6 | x.length > 16) {
  alert("Il nome utente deve essere compreso tra 6 - 16 caratteri");
  document.MM_returnValue = false;
  }
  else {
  document.MM_returnValue = (myErr=='');
  }
 if (y.length < 6 | y.length > 16) {
  alert("La password deve essere compresa tra 6 - 16 caratteri");
  document.MM_returnValue = false;
  }
  else {
  document.MM_returnValue = (myErr=='');
  }
}
Nel form ho onSubmit="return document.MM_returnValue;"
In pratica la prima funzione (non creata da me) incrementa la variabile
MyErr che se non vuota mi invia il form altrimenti compare un alert.
Funzionava benissimo finchč non ho avuto la necessitą di creare un controllo
ulteriore (seconda funzione).
Ho modificato la prima funzione togliendo dall'ultima riga la stringa:
document.MM_returnValue = (myErr=='');
sostituendola con:
check();
Il mio problema ora č che il form viene bloccato solo se l'errore avviene
nella seconda funzione; se avviene nella prima vedo l'alert che invita a
compilare i campi mancanti ma poi il form viene inviato lo stesso.
Forse sono stato poco chiaro, comunque spero che mi possiate aiutare.
ciao
Fausto

 compilare i campi mancanti ma poi il form viene inviato lo stesso.
Sinceramente, si dovrebbe vedere l'intera funzione (sia la prima che la 
seconda) per modificare lo script nel miglior modo possibile.. Cmq, a naso, 
direi che MyErr e' una funzione locale della prima funzione, e quindi non e' 
visibile nella seconda ed e' probabilmente questo a creare gli scompensi che 
hai notato.
Non ho guardato in profondita' lo script che hai postato (anche perche', 
ripeto, senza la prima parte e' utile parzialmente), ma se questo fosse l'unico 
problema, lo puoi risolvere passando MyErr come parametro:
function .. {
	/* istruzioni */
	check(MyErr);
}
function check(MyErr){
	/* il tuo codice */
}
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

Ti posto l'intero codice:
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document;
if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++)
x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++)
x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function YY_checkform() { //v4.66
//copyright (c)1998,2002 Yaromat.com
  var args = YY_checkform.arguments; var myDot=true; var myV=''; var
myErr='';var addErr=false;var myReq;
  for (var i=1; i<args.length;i=i+4){
    if (args[i+1].charAt(0)=='#'){myReq=true;
args[i+1]=args[i+1].substring(1);}else{myReq=false}
    var myObj = MM_findObj(args[i].replace(/\[\d+\]/ig,""));
    myV=myObj.value;
    if (myObj.type=='text'||myObj.type=='password'||myObj.type=='hidden'){
      if (myReq&&myObj.value.length==0){addErr=true}
      if ((myV.length>0)&&(args[i+2]==1)){ //fromto
        var myMa=args[i+1].split('_');if(isNaN(myV)||myV<myMa[0]/1||myV >
myMa[1]/1){addErr=true}
      } else if ((myV.length>0)&&(args[i+2]==2)){
          var rx=new
RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-z]{2,4}$");if(!rx.test(myV))addErr=true;
      } else if ((myV.length>0)&&(args[i+2]==3)){ // date
        var myMa=args[i+1].split("#"); var myAt=myV.match(myMa[0]);
        if(myAt){
          var myD=(myAt[myMa[1]])?myAt[myMa[1]]:1; var myM=myAt[myMa[2]]-1;
var myY=myAt[myMa[3]];
          var myDate=new Date(myY,myM,myD);
if(myDate.getFullYear()!=myY||myDate.getDate()!=myD||myDate.getMonth()!=myM)
{addErr=true};
        }else{addErr=true}
      } else if ((myV.length>0)&&(args[i+2]==4)){ // time
        var myMa=args[i+1].split("#"); var
myAt=myV.match(myMa[0]);if(!myAt){addErr=true}
      } else if (myV.length>0&&args[i+2]==5){ // check this 2
            var myObj1 = MM_findObj(args[i+1].replace(/\[\d+\]/ig,""));
if(myObj1.length)myObj1=myObj1[args[i+1].replace(/(.*\[)|(\].*)/ig,"")];
            if(!myObj1.checked){addErr=true}
      } else if (myV.length>0&&args[i+2]==6){ // the same
            var myObj1 = MM_findObj(args[i+1]);
            if(myV!=myObj1.value){addErr=true}
      }
    } else
    if (!myObj.type&&myObj.length>0&&myObj[0].type=='radio'){
          var myTest = args[i].match(/(.*)\[(\d+)\].*/i);
          var myObj1=(myObj.length>1)?myObj[myTest[2]]:myObj;
      if
(args[i+2]==1&&myObj1&&myObj1.checked&&MM_findObj(args[i+1]).value.length/1=
=0){addErr=true}
      if (args[i+2]==2){
        var myDot=false;
        for(var j=0;j<myObj.length;j++){myDot=myDot||myObj[j].checked}
        if(!myDot){myErr+='* ' +args[i+3]+'\n'}
      }
    } else if (myObj.type=='checkbox'){
      if(args[i+2]==1&&myObj.checked==false){addErr=true}
if(args[i+2]==2&&myObj.checked&&MM_findObj(args[i+1]).value.length/1==0){add
Err=true}
    } else if (myObj.type=='select-one'||myObj.type=='select-multiple'){
      if(args[i+2]==1&&myObj.selectedIndex/1==0){addErr=true}
    }else if (myObj.type=='textarea'){
      if(myV.length<args[i+1]){addErr=true}
    }
    if (addErr){myErr+='* '+args[i+3]+'\n'; addErr=false}
  }
  if (myErr!=''){alert('The required information is incomplete or contains
errors:\t\t\t\t\t\n\n'+myErr)}
check();
}
function check()
{
var x = document.registrazione.txtnome_utente.value
var y = document.registrazione.txtpass.value
 if (x.length < 6 | x.length > 16) {
  alert("Il nome utente deve essere compreso tra 6 - 16 caratteri");
  document.MM_returnValue = false;
  }
  else {
  document.MM_returnValue = (myErr=='');
  }
 if (y.length < 6 | y.length > 16) {
  alert("La password deve essere compresa tra 6 - 16 caratteri");
  document.MM_returnValue = false;
  }
  else {
  document.MM_returnValue = (myErr=='');
  }
}
<form name="registrazione" method="POST" action="invio.asp"
onSubmit="YY_checkform('registrazione','Accetta','#q','1','Controlla la
sezione Privacy.');return document.MM_returnValue;">
Il mio primo tentativo era stato quello di includere in un'unica alert anche
gli ulteriori errori, mo non ho avuto fortuna (meglio dire che non ho ancora
le capacità per farlo;-) )
Quale differenza corre fra un "or" logico ed uno binario?
Grazie per esserti interessato
Fausto

 Quale differenza corre fra un "or" logico ed uno binario?
http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/ops.h
tml#1042437


Sě avevo provato ma non funzionava dato che invece di "myErr" passavo
"MyErr".
Ora sembra essere tutto OK.
Grazie tanto per il tuo aiuto e per il tuo tempo.
Ciao
Fausto