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

    controlli su onblur con Firefox

    In una applicazione web, devo spesso fare dei controlli sul valore di un input all'uscita tramite l'evento onblur. Se il test fallisce, il cursore deve tornare sul campo. Ma con Firefox questo non funziona, evidentemente gestisce diversamente l'evento.

    Ho già provato a sistemare il problema, posticipando l'esecuzione della routine di controllo di 5 millisecondi con la setTimeout, ma alla lunga il trucchetto mostra i suoi limiti: a volta il timeout provoca accavallamenti tra chiamate di procedure, altre volte il focus non va sul campo da correggere.

    Come posso fare allora?
    All of the true things that I am about to tell you are shameless lies.
    (Bokonon Books)

  2. #2
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530
    I timer, setTimeout() e setInterval() "impazziscono" se attivati ripetutamente mentre sono già in opera; ovvero, con setTimeout() lo puoi ancora fare se attendi la fine del singolo ciclo.

    Debonsi ( ) resettare con clearTimeout() e clearInterval() prima di dare un nuovo avvio alla temporizzazione.

    nomeTimer = setTimeout('myFunction(), 5);

    clearTimeout(nomeTimer)


    e vanno nominati, perché il clear possa individuarli.
    Non si può però dare l' avvio a un clear per un timer che ancora non esiste, quindi o prima parte il timer comunque, oppure lo si dichiara come variabile globale nello script:

    var nomeTimer;

    e con questo, l' occorrenza di un clearTimeout() iniziale non produce più impedimento all' esecuzione dello script.

  3. #3
    Originariamente inviato da Enzaccio
    Debonsi ( ) resettare con clearTimeout() e clearInterval() prima di dare un nuovo avvio alla temporizzazione.
    Questo già lo faccio: è la procedura stessa che esegue (tramite eval) il codice da eseguire all'onblur, che si preoccupa di pulire il timer. L'accavallamento era dovuto al fatto che mentre si eseguiva il codice dell'onfocus del successivo input, scattava il timer che faceva eseguire l'onblur di quello in esame.

    Ho già lavorato parecchio per risolvere tutti questi problemi dovuti al far eseguire del codice posticipato con il timer, ma più proseguo e più aumentano. Ora inizio a pensare che converrebbe tornare indietro e eliminare i timer e trovare pertanto un'altra strada per eseguire correttamente gli onBlur su Firefox.
    All of the true things that I am about to tell you are shameless lies.
    (Bokonon Books)

  4. #4
    Scrivo un'altra cosa che ho notato in questi giorni di test: capita spesso che l'evento onblur venga generato due volte anziché una sola.
    Mi spiego meglio: all'onblur su un input di tipo testo, verifico che il dato sia inserito correttamente; se ciò non avviene, invio un alert all'utente e rimetto il focus sull'input. L'effetto che ottengo è una doppio alert, al termine del quale il focus va correttamente sull'input incriminato, ma stranamente sull'input seguente viene eseguito l'evento onfocus (che colora di giallo lo sfondo) ma non il suo onblur (che lo rimette bianco).

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