2012-04-06 10 views
6

Campo de texto regular, el usuario ingresa una cadena. Compruebe si a) hay algo en la entrada, b) que no hay espacios en blanco en la entrada, yc) solo es un número entero, no hay otros caracteres. Luego el botón enviar. Observará que no estoy utilizando el comportamiento html, no hay ningún clic en la entrada, separación estricta de Contenido/Presentación/Comportamiento.javascript focus() no se está enfocando

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

Tenga en cuenta también que el archivo JavaScript externo se añade al final de la así todos los elementos se pueden cargar (no preocuparse por onload en este 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); 

Cuando entro en una entrada incorrecta, la lógica funciona, pero el cursor no se centra de nuevo a la caja de texto, independientemente del navegador que uso.

violín: http://jsfiddle.net/2CNeG/

Gracias, Don

Respuesta

4

A mi me parece como que se están centrando en su elemento de formulario; es necesario centrarse en los cuadros de texto en su lugar:

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

o myTextBox.focus() en el código.

+0

@DonG Parece que también envía el formulario independientemente de si se aprueba o no. – bfavaretto

+0

Sí; sería mejor para él usar type = 'button' --OR-- para devolver false en la función de validación para aquellas rutas donde la validación falla. –

+0

De acuerdo, veo tu punto, lo he cambiado a myTextBox.focus(); y aún no se enfoca en el cuadro de entrada/texto. – DonG

6

Observará que una vez que haya comentado su casilla de alerta, podrá ver que su enfoque funciona. Pero hay una solución para la misma. Prueba este. Creo que debería funcionar.

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

Sí, veo que el foco está ahí por una fracción de segundo, luego desaparece ... – DonG