2012-04-06 14 views
6

Campo di testo normale, l'utente inserisce una stringa. Verifica se a) c'è qualcosa nell'input, b) che non ci sono spazi bianchi nell'input, e c) è solo in numeri interi, nessun altro carattere. Quindi il pulsante di invio. Noterai che non sto usando il comportamento html, non c'è onclick nell'input, strict Content/Presentation/Behavior separation.javascript focus() non è attivo

mio HTML:

<form name="basicText" id="basicText" action=""> 
<p>Enter any ol' integer: 
<input type="text" id="inputBox" name="inputBox" size="14"/>  
<input value = "Next...?" type="submit" id="mySubmitBtn" name="mySubmitBtn"/> 
</p> 
</form> 
<script src="js/w1bscript.js" type="text/javascript"></script> 

noti inoltre che il file JavaScript esterno viene aggiunto alla fine dei così tutti gli elementi in grado di caricare (non preoccuparsi di onload in questo momento).

La JavaScript:

var myButton1 = document.getElementById("mySubmitBtn"); 
var myForm1 = document.getElementById("basicText"); 
var myTextBox = myForm1.inputBox; 

function submitPress() { 
if(myTextBox.value.length == 0) { 
    alert("You didn't enter anything! Once more time, with feeling...") 
    basicText.focus(); 
    basicText.select(); 
} else if(/\s/.test(myTextBox.value)) { 
    alert("Eh... No spaces. Just integers. Try again..."); 
    basicText.focus(); 
    basicText.select(); 
    } else if (isNaN(myTextBox.value)==true) { 
    alert("Eh... Gonna need you to enter ONLY digits this time. kthnx."); 
    basicText.focus(); 
    basicText.select(); 
} else { 
    // The textbox isn't empty, and there's no spaces. Good. 
    alert("you've passed the test!") 
    } 
} 
myButton1.addEventListener('click', submitPress, false); 

Quando entro in un ingresso errato, la logica funziona, ma il cursore non si sta concentrando di nuovo alla casella di testo, non importa quale browser che uso.

Fiddle: http://jsfiddle.net/2CNeG/

Grazie, Don

risposta

4

Sembra a me come si stanno concentrando su vostro elemento forma; è necessario concentrarsi sulle vostre caselle di testo, invece:

document.getElementById('inputBox').focus(); 

o myTextBox.focus() nel codice.

+0

@DonG Sembra anche che si stia inviando il modulo indipendentemente dal superamento della convalida o meno. – bfavaretto

+0

Yup; sarebbe meglio per lui usare type = 'button' --OR-- per restituire false nella funzione di validazione per quei percorsi in cui la validazione fallisce. –

+0

Ok, vedo il tuo punto, l'ho cambiato in myTextBox.focus(); e ancora nessun focus per l'input/casella di testo. – DonG

6

Noterai che una volta che avrai commentato la tua casella di avviso, sarai in grado di vedere il tuo focus attivo. Ma c'è una soluzione per lo stesso. Prova questo. Penso che dovrebbe funzionare.

setTimeout(function() { 
     document.getElementById('inputBox').focus(); 
    }, 0); 
+0

Sì, vedo che l'attenzione è lì per una frazione di secondo, poi si allontana ... – DonG