Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    54

    focus e differenze tra ie e firefox... come risolvere?

    Salve a tutti,
    devo fare dei controlli sul valore di un input e li faccio alla sua uscita tramite l'evento onblur. Se il test fallisce, vorrei che il cursore tornasse nel campo. Schematicamente il codice e' questo:

    <html><head>
    <script type="text/javascript">
    function ridammiilfocus(mionome){
    document.getElementById('myInput1').focus();
    }

    window.onload=function(E){
    document.getElementById('myInput1').focus();
    }
    </script>
    </head>
    <body><div>
    <form method="get" onsubmit="return false" name="pippo">
    <input type="text" name="myInput1" id='myInput1' onblur="ridammiilfocus(this);" value="qua sempre il focus!"/>
    <input type="text" name="myInput2" id='myInput2' value="qua mai!"/>
    </form></div></body></html>
    se lo provate con internet explorer funziona perfettamente, con firefox invece no! Come posso risolvere?

    grazie a tutti
    cucca

  2. #2
    Prova ad associare la chiamata alla funzione JS ridammiilfocus() all'evento onFocus del secondo campo input.

    ....
    <input type="text" name="myInput1" id='myInput1' value="qua sempre il focus!"/>
    <input type="text" name="myInput2" id='myInput2' onfocus="ridammiilfocus(this);" value="qua mai!"/>
    ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    54
    cosi' funziona! Solamente che nel caso reale ho molti piu' input e non vorrei mettere un onfocus in ogni input perche' la cosa mi porterebbe a validare tante volte l'input myInput1!

  4. #4
    Evidentemente questo bug di firefox fa si che il codice JS contenuto nell'evento onblur si esegua PRIMA del focus all'input successivo e non dopo come in IE.


    Potresti abbastanza brillantemente superare la questione impostando un ritardo all'esecuzione del codice con la funzione setTimeout()

    <input type="text" name="myInput1" id='myInput1' onblur="setTimeout('ridammiilfocus(this)',5);" value="qua sempre il focus!" />
    <input type="text" name="myInput2" id='myInput2' value="qua mai!"/>
    Michele Castellucci
    Sviluppatore Web del Consorzio CottonBit
    Consorzio Cottonbit
    Risorse per la programmazione
    Dire Fare Programmare!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    54
    grazie ghiaccio84!!! Non so proprio come ringraziarti!! Sono giorni che ci sbatto la testa!!!!


    finalmenteeeee grazie 1000!!!

  6. #6
    Bè di nulla

    Ma soprattutto grazie per l'iscrizione al mio sito.

    Sei il primo utente e spero mi farai compagnia condividendo qualche bel sorgente o suggerendo links per consentire a questo sito di crescere....

    Ciao ciao
    (OT: domani vado al mare )
    Michele Castellucci
    Sviluppatore Web del Consorzio CottonBit
    Consorzio Cottonbit
    Risorse per la programmazione
    Dire Fare Programmare!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    54
    Prego... spero che diventi grande come sito, i presupposti sono giusti... sono un newbie della programmazione web ma spero di poter contribuire con qualche script/classe in php! Cmq ci sono diverse cose interessanti nel tuo sito anche se e' ancora giovane!

    ciao

  8. #8
    Ho adottato anch'io questo trucco del timeout, ma più vado avanti nel lavoro di conversione dell'applicazione da IE-only a Firefox-compatibile, più questo trucco mostra i suoi limiti.
    Già ho dovuto sostituire tutti i punti in cui nell'attributo onblur si faceva riferimento a "this", adesso ho un problema molto più complicato.

    Infatti ho un caso in cui assieme all'onblur di un input di testo, viene a scatenarsi anche l'onclick di un bottone (ma potrebbe essere anche l'onfocus di un altro input o il submit di un form). Normalmente, questo secondo evento avverebbe solo dopo l'onblur, invece in questo caso, posticipando il codice con il setTimeout, viene prima eseguito il codice relativo al click sul bottone, e nel mentre scatta il codice schedulato con il timeout, accavallando le due chiamate. Ho realizzato un meccanismo per far sì che ogni chiamata ad evento (onfocus, onclick, onchange) richiami prima una procedura che verifichi se c'è un codice legato ad un onblur da eseguire prima.
    Ma a questo punto, le procedure di convalida che "bloccavano" l'utente tramite un "return false;" non sono più efficaci, perché tanto vengono eseguite all'interno del codice dell'onclick.

    Come fare? Esiste una strada migliore per gestire questo problema dei focus, senza usare questi tremendi setTimeout? Oppure per "bloccare" l'utente se il valore inserito nell'input non è valido?

    Spero che per una volta il forum mi risponda, è da un po' che i miei quesiti rimangono irrisolti.
    All of the true things that I am about to tell you are shameless lies.
    (Bokonon Books)

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.