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

    problema focus onblur solo su osx

    Salve a tutti, ho iniziato da poco lo studio di javascript ma mi sono già imbattuto in un grosso problema che non riesco a superare e spero nell'aiuto di qualcuno di voi.
    Ho realizzato un semplice form in html e, tramite una funzione js, vorrei gestire la validazione dei singoli input.
    Ho scelto come evento onblur() perchè mi serve un controllo campo per campo da eseguire appena il campo stesso perde il focus e, per una serie di ragioni, il collegamento tra il tag input e la funzione js vorrei realizzarlo direttamente sul tag html senza utilizzare forme del tipo addEventListener("blur", myFunction) o myobj.onblur=myfunction().
    Il controllo si basa sulla verifica che il valore inserito non sia vuoto e non sia 'pippo' (è un esempio, in futuro i controlli saranno passati alla funzione come parametri).
    Vi riporto il codice :
    codice:
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    <form name="form1" action="cli.php" method="POST">
    RAGIONE SOCIALE  : <input type="text" id="fname"  tabindex="1" onblur="valid1(this)" >
    <br>
    RAGIONE SOCIALE 2: <input type="text" id="riga2" tabindex="2" onblur="valid1(this)" >
    <br>
    INDIRIZZO        : <input type="text" id="findi" tabindex="3" onblur="valid1(this)" >
    <br>
    CITTA            : <input type="text" id="fcitta" tabindex="4" onblur="valid1(this)" >
    <br>
    PROV             : <input type="text" id="fprov" tabindex="5" onblur="valid1(this)" >
    <br>
    CAP              : <input type="text" id="fcap" tabindex="6" onblur="valid1(this)" >
    </form>
        
    <script>
        function valid1(obj) {       
            var x = obj.value;
            if ((x == "pippo") || (x==""))  {
              alert("VALORE NON CONSENTITO");
                obj.value = "";
                obj.blur();
                obj.focus(false,300);
                return false;
            }
            return true;
        }
    </script>
    </body>
    </html>
    Ora veniamo al problema. Funziona perfettamente su tutti i browser provati ma solo sotto os Windows. Io invece lavoro su osx (yosemite 10.10.1) e ho provato con firefox 49.0, chrome 53.0.2785 e safari 8.0.
    Il difetto con osx consiste nel fatto che quando simulo un inserimento non consentito, mi visualizza l'alert, poi :
    - su chrome imposta il focus correttamente sull'input da correggere ma mi ripresenta l'alert ciclicamente impedendomi di scrivere.
    - su firefox invece sbaglia il focus e lo imposta all'input successivo lasciando il campo precedente vuoto (valore non consentito) e permettendomi di inserire il valore dell'input successivo.

    Ho iniziato da pochi giorni ad imparare html, js e php ma provengo da tanti anni di programmazione in clipper e cose del genere per me sono davvero inconcepibili. Spero tanto di essere io ad avere sbagliato qualcosa anche perchè mi sembra impossibile che per gli utilizzatori osx non sia possibile risolvere un problema così semplice.
    Ringrazio tutti per la pazienza e confido in voi.

  2. #2
    Il problema dell'alert ciclico credo sia dovuto al comando:
    codice:
    obj.blur();
    Quando sei nella funzione valid1(), il blur è già avvenuto, perché "rilanciarlo"?


    Secondo punto: non mi risulta che il metodo focus() accetti parametri. Tu gli passi invece "false" e "300".


    Un altro appunto è il "return true" alla fine della funzione, qual è il suo scopo? Messo lì è perfettamente inutile.

  3. #3
    Ciao, ti ringrazio per la risposta.
    Effettivamente le tue osservazioni sono tutte corrette. Le imprecisioni che noti sono frutto della mia inesperienza e delle continue modifiche al codice googlando in cerca della soluzione. Il codice in origine era privo di questi elementi errati/superflui.
    Comunque anche ripulendo il codice, continua ad avere il comportamento anomalo indicato nel primo messaggio.
    Grazie a svariati consigli raccolti su internet e a decine di prove, ho fatto dei passi in avanti. Ora su chrome funziona e l'unica modifica fatta è stata quella di sostituire l'alert con un tag span.
    Su firefox continua a spostarmi il focus sul campo successivo. Lo stesso codice su Firefox sotto Windows lo imposta correttamente.
    Qualche idea?

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Il concetto di usare l'evento onblur per validare un input è sbagliato, per forzare il ritorno indietro su firefox e temporizzare con un setTimeout onfocus
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Ciao, riprovo ad inserire il setTimeout anche se avevo già tentato questa strada. Considera che il problema accade solo su firefox su OSX, mentre sotto Windows, si comporta come previsto.

    Il concetto di usare l'evento onblur per validare un input è sbagliato
    perchè? Cosa consigli di usare nel caso di un controllo su ogni singolo campo e non al submit del form?

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Quote Originariamente inviata da antoniocangiano Visualizza il messaggio
    perchè? Cosa consigli di usare nel caso di un controllo su ogni singolo campo e non al submit del form?
    Nulla i controlli si fanno al submit, proprio per i problemi che hai e non è detto che sistemando per un browser non si blocchi in un'altro inoltre ad un aggiornamento del browser potrebbe bloccarsi il form. È solo un pensiero personale.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

Tag per questa discussione

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.