Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Errore in un ciclo for utilizzando il metodo focus()

    Salve a tutti, spero che qualcuno possa aiutarmi a risolvere il mio problema.
    Ho un form i cui campi (tranne i pulsanti) hanno una funzione associata all'evento onblur.
    Ho realizzato questa funzione che in teoria dovrebbe esaminare tutti i campi del form ed al verificarsi di un'opportuna condizione dare il focus a quello corrente in modo da scatenare tale evento.

    Codice PHP:
    function esploraform() {     
    var 
    valid=true;     
    for(
    i=0i<document.forms[0].elements.lengthi++)     
    {         
    if(
    document.forms[0].elements[i].type.toLowerCase()!='button' && document.forms[0].elements[i].type.toLowerCase()!='submit')         
    {             
    if(
    //condizione)             
    {                 
    valid=false;                 
    document.forms[0].elements[i].focus();             
    }         
    }     
    }     
    return 
    valid;
     } 
    Ho notato che la funzione eseguiva soltanto il primo ciclo (quello i=0) e con un po' di debug ho scoperto che dopo la funzione focus() i mi cambiava misteriosamente passando da 0 a 4!!!

    Non so proprio darmi una spiegazione.
    Probabilmente è un errore banale dovuto all'inesperienza.
    Vi ringrazio in anticipo per l'attenzione.

  2. #2
    guarda, se non dici com'è l'html e qual'è la condizione del secondo if, è parecchio difficile darti una dritta...

  3. #3
    Allora il form è questo:

    Codice PHP:
    <form  name="autenticazione" id="autenticazione" method="post"  action="javascript:if(esploraform())completeAHAH.likeSubmit('areariservata/menuadmin.php', 'POST', 'autenticazione', 'menuadmin'); else alert('Controllare che tutti i campi siano stati compilati correttamente');">

      <
    label>UserName:</label>
      

    <
    input type="text" id="user" name="user" onblur="javascript: valida('user','erruser','req','alpha');">
      <
    div id="erruser" style="display:none"></div></p>
         
      <
    label>Password:</label>
      

    <
    input type="password" id="pw" name="pw" onblur="javascript: valida('pw','errpw','req','alpha'); " >
      <
    div id="errpw" style="display:none"></div></p>
      
      

    <
    input type="submit" id="Submit" value="Login"></p>
    </
    form
    Mentre la condizione che vado a valutare è:

    Codice PHP:
    document.getElementById('err'+document.forms[0].elements[i].name;).style.display=='none' 
    Non avevo specificato per evitare di confondere le idee, comunque non credo sia quella la ragione del malfunzionamento...perché basta eliminare focus() affinché il ciclo prosegua normalmente.

  4. #4
    si, ma quando viene chiamato l'esploraform?

  5. #5
    Ops scusa... sarebbe la stessa cosa di validaform...
    Vado a modificare il post...
    Viene chiamata nel submit comunque.

  6. #6
    Giusto per darti un'idea di quello che ho ottenuto dal debug

    Codice PHP:
    function esploraform() {     
    var 
    valid=true;     
    for(
    i=0i<document.forms[0].elements.lengthi++)     
    {         
    if(
    document.forms[0].elements[i].type.toLowerCase()!='button' && document.forms[0].elements[i].type.toLowerCase()!='submit')         
    {             
    if(
    //condizione)             
    {                 
    valid=false;     
             
    alert('i');   //QUI E' ZERO
    document.forms[0].elements[i].focus();  
    alert('i');  //QUI E' QUATTRO
               
    }         
    }     
    }     
    return 
    valid;


  7. #7
    prova così:
    Codice PHP:
    function esploraform() {     
    var 
    valid=true;     
    var 
    elem null;
    for(
    i=0i<document.forms[0].elements.lengthi++)     
    {         
    if(
    document.forms[0].elements[i].type.toLowerCase()!='button' && document.forms[0].elements[i].type.toLowerCase()!='submit')         
    {             
    if(
    //condizione)             
    {                 
    valid=false;     

    elem document.forms[0].elements[i];  
    break; 
    }         
    }     
    }     
    if(
    elem)
       
    elem.focus();
    return 
    valid;


  8. #8
    ci provo immediatamente, nel frattempo grazie per il tuo tempo!

  9. #9
    Ho dovuto spostare la chiamata al metodo focus() all'interno del ciclo for perché a me interessa aggire su TUTTI i campi che soddisfano la condizione, non solo sul primo rilevato. Sono riuscita comunque ad aggirare l'ostacolo in modo molto maccheronico sfruttando anche il tuo suggerimento. Posto il codice nel caso possa interessare.

    Codice PHP:

    function esploraform() {     
    var 
    valid=true;     
    var 
    elem null;
    var 
    j=0;
    var 
    indici=new Array();
    for(
    i=0i<document.forms[0].elements.lengthi++)     
    {         
        if(
    document.forms[0].elements[i].type.toLowerCase()!='button' && document.forms[0].elements[i].type.toLowerCase()!='submit')         
        {             
            
    str=document.forms[0].elements[i].name;
            
    str='err'+str;
            if(
    document.getElementById(str).style.display=='none')           
            {                 
            
    valid=false;  
            
    indici[j]=i;
            }         
        } 
        
    j++;
    }    
    for(
    s=0s<indici.lengths++)
    {
        var 
    t=indici[s];
        
    elem document.forms[0].elements[s];  
        if(
    elem)
        
    elem.focus();
    }
    return 
    valid;

    Ti ringrazio di nuovo per l'interessamento.

  10. #10
    scusa, ma non vorrei lasciarti con un'idea sbagliata su cosa fa focus():

    focus() sposta il cursore nell'input in cui viene chiamato quindi se chiami n volte focus alla fine il cursore sarà sull'ultimo elemento dove l'hai chiamato, e gli altri non cambiano di nulla.

    Mi spiace dirtelo ma il tuo metodo non fa nulla se non mettere il cursore nell'ultimo elemento della lista indici

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 © 2024 vBulletin Solutions, Inc. All rights reserved.