2012-04-06 3 views
6

Regelmäßige Textfeld, Benutzer gibt eine Zeichenfolge ein. Testen Sie, ob a) etwas in der Eingabe vorhanden ist, b) dass in der Eingabe kein Leerzeichen enthalten ist, und c) nur ganze Zahlen sind, keine anderen Zeichen. Dann die Schaltfläche senden. Sie werden feststellen, dass ich nicht HTML-Verhalten verwende, gibt es keinen onclick in der Eingabe, strenge Trennung von Inhalt/Präsentation/Verhalten.Javascript Fokus() ist nicht fokussiert

Mein 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> 

Beachten Sie auch, dass die externe JavaScript-Datei am Ende der so alle Elemente hinzugefügt wird, laden können (nicht über onload jetzt besorgniserregend).

Das 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); 

Wenn ich eine falsche Eingabe ein, die Logik arbeitet, aber der Cursor nicht zurück in das Textfeld konzentrieren, egal welchen Browser ich verwende.

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

Danke, Don

Antwort

4

Es sieht für mich wie Sie auf dem Formular Element konzentrieren; auf Ihre Textfelder müssen Sie stattdessen konzentrieren:

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

oder myTextBox.focus() in Ihrem Code.

+0

@DonG Sie scheinen auch das Formular einzureichen, unabhängig davon, ob die Validierung bestanden wurde oder nicht. – bfavaretto

+0

Yup; es wäre besser für ihn, type = 'button' --OR-- zu verwenden, um false in der Validierungsfunktion für jene Pfade zurückzugeben, bei denen die Validierung fehlschlägt. –

+0

Okay, ich sehe Ihren Punkt, ich habe es in myTextBox.focus() geändert; und immer noch keinen Fokus auf die Eingabe/Textfeld. – DonG

6

Sie werden feststellen, dass Sie nach dem Kommentieren Ihrer Alarmbox sehen können, dass Ihr Fokus funktioniert. Aber es gibt eine Lösung für dasselbe. Versuchen Sie es. Ich denke, es sollte funktionieren.

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

Ja, ich sehe, dass der Fokus für einen Bruchteil einer Sekunde da ist, dann geht es weg ... – DonG