Notizie: lo sai che puoi installare Firefox anche su dispositivi Apple iPhone e iPad? Provalo subito!

Autore Topic: Javascript OnBlur non mantiene il focus  (Letto 4693 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline imotheph

  • Post: 31
Javascript OnBlur non mantiene il focus
« il: 22 Febbraio 2011 14:06:03 »
Ciao
Ho un problema che non riesco a risolvere da parecchio tempo ma non so se questo è il posto giusto dove fare la domanda.
Il problema riguarda il controllo dei campi di input con l'instruzione Javascript ONBLUR.
Quando la utilizzo, all'uscita campo eseguo una funzione che controlla se il campo è vuoto.
Se il campo di input è vuoto, mando un alert e faccio focus sul campo errato.
Ebbene, non c'è verso di mantenere il focus sul campo di input errato, nonostante l'errore il focus si sposta al campo di input successivo.
Questo comportamento con Internet Explorer non si verifica: il focus rimane sul campo errato dopo l'alert dell'errore.
Qualcuno mi sa aiutare ?

Allego il codice
Codice: [Seleziona]
<html>
<head>
<title>Statistiche</title>

<script language="Javascript">
function checkdata() {
if (document.form1.dataini.value=="")  {
alert("Data errata!")
document.form1.dataini.focus()
return
}
}
</script>

</head>

<body text=black link=blue vlink=purple alink=blue>

<form name=form1 method=post>
<table border=0>
<tr>
<td align=left valign=bottom>Data iniziale</td>
<td align=left><input type=text name=dataini size=10 onblur="checkdata()"></td>
</tr>
<tr>
<td align=left valign=bottom>Data finale</td>
<td align=left><input type=text name=datafin size=10></td>
</tr>
</table>
</form>
</body>
</html>


Edit by gialloporpora: inerito il codice usando i tag cod
« Ultima modifica: 22 Febbraio 2011 14:15:49 da gialloporpora »

Offline prometeo

  • Moderatore
  • Post: 2538
    • https://www.tenutamontescosso.it/
Re: Javascript OnBlur non mantiene il focus
« Risposta #1 il: 22 Febbraio 2011 16:43:55 »
A me funziona perfettamente: SM2.1b3pre Linux x86_64.
L'ho provato qui: http://www.w3schools.com/jsref/event_onblur.asp (con Try it yourself).
Non vedo perché non dovrebbe funzionare con FF4.

Con SM 2.0.11 (equivalente a FF3.6.x) invece il campo non prende il focus se non facendoci clic dentro.

Forse qualche bug su onblur che è stato sistemato solo di recente?
Ciao, Giacomo.

Offline imotheph

  • Post: 31
Re: Javascript OnBlur non mantiene il focus
« Risposta #2 il: 22 Febbraio 2011 18:17:58 »
Ciao
Ho dimenticato la versione di firefox: 3.6.13 su windows.

L'esempio però secondo me non calza al mio scopo.
Io ho bisogno di controllare un campo di input e se questo è errato, mantenere il focus su questo campo, fino a quando viene inserito un valore valido.

Offline gialloporpora

  • サンドロ
  • Moderatore
  • Post: 10806
    • Il blog che non c'è
Re: Javascript OnBlur non mantiene il focus
« Risposta #3 il: 22 Febbraio 2011 20:43:02 »
Riscontro il problema anche io:

Codice: [Seleziona]
Mozilla/5.0 (Windows NT 5.1; rv:2.0b12pre) Gecko/20110221 Firefox/4.0b12pre

con gli alert modali il focus va nel secondo input box, con l'avviso non modale non va da nessuna parte. Con Opera e Chrome funziona.

prova a caricare online quella pagina che così altri  possono confermare o smentire.



Offline A35G

  • Post: 642
    • HackWorld - La Rinascita del Sapere -
Re: Javascript OnBlur non mantiene il focus
« Risposta #4 il: 23 Febbraio 2011 10:30:14 »
Questo problema, l'ho riscontrato anche io nelle ultime release di Firefox...e non son riuscito a trovare una soluzione attualmente se non quella di evitare il focus in js e/o utilizzare dei bordi colorati sui campi obbligatori non compilati o compilati in modo errato.

Offline gialloporpora

  • サンドロ
  • Moderatore
  • Post: 10806
    • Il blog che non c'è
Re: Javascript OnBlur non mantiene il focus
« Risposta #5 il: 23 Febbraio 2011 11:59:47 »

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Javascript OnBlur non mantiene il focus
« Risposta #6 il: 23 Febbraio 2011 13:55:20 »
Prova questo:

Codice: [Seleziona]
function checkdata() {
   if (document.form1.dataini.value=="")  {
        alert("Data errata!");
        setTimeout(function() {document.form1.dataini.focus()}, 0);
        return false;
   }
}

Offline gialloporpora

  • サンドロ
  • Moderatore
  • Post: 10806
    • Il blog che non c'è
Re: Javascript OnBlur non mantiene il focus
« Risposta #7 il: 23 Febbraio 2011 14:10:52 »
Così a me funziona sulla 4.0 :-)

Offline imotheph

  • Post: 31
Re: Javascript OnBlur non mantiene il focus
« Risposta #8 il: 23 Febbraio 2011 20:26:23 »
Cosi' funziona !!!
della discussione su Firebug non ho capito molto.
So solo che IE funziona diversamente in questo caso.
Mi sai dire cosa significa quel
setTimeout(function() {document.form1.dataini.focus()}, 0);
con quello 0 alla fine che mi inquieta ?
Ciao e grazie gialloporpora.

Offline gialloporpora

  • サンドロ
  • Moderatore
  • Post: 10806
    • Il blog che non c'è
Re: Javascript OnBlur non mantiene il focus
« Risposta #9 il: 23 Febbraio 2011 21:57:14 »
Io ho solo capito che è un bug di Firefox che dipende dal timeout di attesa per l'onblur, quell'istruzione imposta un timeout  (tempo di attesa) nullo, cioè è come non ci fosse, però forse è meglio se te lo spiega @klades che è un guru in materia.

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Javascript OnBlur non mantiene il focus
« Risposta #10 il: 24 Febbraio 2011 11:14:47 »
Non conosco nei dettagli il modo in cui Firefox gestisce l'evento onblur, ma sembrerebbe che lo spostamento del focus all'altro elemento venga eseguito dopo l'esaurimento del codice javascript.

Quindi, nel caso specifico, lo spostamento del focus su "datafin" avviene dopo che è stato eseguito document.form1.dataini.focus(), rendendo in pratica inutile quest'ultima istruzione.

Questo problema è aggirabile con un brevissimo setTimeout che ritarda l'esecuzione del comando di quel poco che serve. Il tempo di attesa (delay) impostato a 0 vuol dire in realtà "nel più breve tempo possibile", che su Firefox equivale a 10ms.

0 Utenti e 1 Visitatore stanno visualizzando questo topic.