Ciao... ho un problema che mi si è riscontrato molte volte e non so risolverlo... devo dire anche che è un po complesso da spiegare.
Vi scrivo il codice di un javascrip che sto creando preso da un articolo sulla gestione dei form:Lo script mi sembra semplice e funziona; io ho fatto solo qualche piccola modifica dall'originale inglobandolo in un oggetto e poco altro. Ora vorrei inglobare anche la seconda parte: vorrei che il il window.onload fosse richiamato al momento dell'istanza dell'oggetto; quindi io vorrei avere in futuro un oggetto unico che al momento della creazionecodice:/*------------------------------------------------------------------- OGGETTO VALIDAZIONE FORM -------------------------------------------------------------------*/ function objForm(){ this.toForm=function(a,b){ var d = eval('document.'+a+'.'+b) d.focus(); }; this.Focus=function(){ var inp=document.getElementsByTagName("input"); for(var i=0;i<inp.length;i++){ inp[i].onfocus=function(){this.style.backgroundColor="#FFC"}; inp[i].onblur=function(){this.style.backgroundColor="#FFF"}; } }; this.Validate=function(){ var labels=document.getElementsByTagName("label"); var validationOK=true; for(var i=0;i<labels.length;i++){ var lab=labels[i]; var n=lab.innerHTML.indexOf("*"); //alert(n) if(lab.className=="req2") lab.className="req"; if(n!=-1){ var inp=lab.getElementsByTagName("input"); if(inp.length>0 && inp[0].value==""){ //input vuoto lab.className="req2"; validationOK=false; } if(inp.length>0 && inp[0].id=="email"){ //email non valida if(!this.isEmail(inp[0].value)){ lab.className="req2"; validationOK=false; } } if(inp.length>0 && inp[0].type=="checkbox" && inp[0].checked==false){ lab.className="req2"; //checkbox non selezionata validationOK=false; } var sel=lab.getElementsByTagName("select"); //select con indice zero if(sel.length>0 && sel[0].selectedIndex==0){ lab.className="req2"; validationOK=false; } } } return(validationOK); } // controlli singoli this.isEmail=function(str){ var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)"); var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"); return (!r1.test(str) && r2.test(str)); }; } /*------------------------------------------------------------------------------------ AVVIO OGGETTO ------------------------------------------------------------------------------------*/ window.onload=function(){ var form_H=new objForm(); form_H.toForm('myform','nome'); if(document.getElementsByTagName) form_H.Focus(); if(!document.getElementById || !document.createElement) return; document.forms[0].onsubmit=function(){ if(form_H.Validate()) document.forms[0].submit(); else{ alert("Attenzione: alcuni campi non sono stati riempiti o l\' indirizzo email fornito non è valido."); return(false); } } }mi facesse attivare il tutto come o con il window.onload.codice:var ogg=new objForm()
Mi rimane un dubbio... per il futuro: come faccio se ho 2 richiami window.onload