Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Aiuto OGGETTI - mi serve un guru mi sa!

    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:
    codice:
    /*-------------------------------------------------------------------
    					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);
       }
      }
     }
    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 creazione
    codice:
    var ogg=new objForm()
    mi facesse attivare il tutto come o con il window.onload.
    Mi rimane un dubbio... per il futuro: come faccio se ho 2 richiami window.onload

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Il titolo...
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Chiedo scusa per il titolo forse poco chiaro, ma non riesco neanche a modificarlo...

    Ho risolto così:
    codice:
    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);
     			   }
    			   
     this.start=function(){
       			 this.toForm('myform','nome');
      			 if(document.getElementsByTagName) this.Focus();
      			 if(!document.getElementById || !document.createElement) return;
    			 var obj_H=this;
            	 document.forms[0].onsubmit=function(){
      			  if(obj_H.Validate())
        		   document.forms[0].submit();
       		 	  else{
        		   alert("Attenzione: alcuni campi non sono stati riempiti o l\' indirizzo email fornito non è valido.");
        		   return(false);
     			  }
     			 }
     }
    			
    // 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));
    			  };
    			  
     this.start();
    }
    Funziona... ma non sono sicuro sia il modo più elegante... Facendo così tolgo il window.onload che creerò pagina per pagina secondo le esigenze, ma riesco a tenere il document.form[0].onsubmit attivo. Che ne pensate? avete altre idee?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.