2011-01-25 92 views
5

Tengo un cuadro de texto en el que quiero establecer el foco, pero no funciona.La función Javascript Focus() no funciona

document.getElementById("txtCity").focus(); 

¿Alguna idea?

+0

¿Cómo se ve el html para el cuadro de texto? –

+5

¿'document.getElementById (" txtCity ")' regresa 'indefinido'? Cualquier error de JavaScript en una consola? ¿Qué navegador? ¿El elemento es realmente enfocable? ** Mostrar más código. ** –

+0

Usando IE8. Sin errores en la página. –

Respuesta

6

¿Tal vez llama al JavaScript antes de que se muestre el elemento de entrada? Coloque el elemento de entrada antes de JavaScript o espere hasta que la página se cargue antes de activar su JavaScript.

En ese orden, funciona muy bien:

<input type="text" id="test" /> 
<script type="text/javascript"> 
    document.getElementById("test").focus(); 
</script> 

En jQuery podría colocar su código en el método .ready() para ejecutar su código por primera vez cuando el DOM está totalmente cargado:

<script type="text/javascript" src="jquery.min.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#test").focus(); 
    // document.getElementById("test").focus(); 
    }); 
</script> 
-1

Trate de envolverlo en el documento r función eady y asegúrese de que tiene jquery incluido.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
    <script> 
     $(document).ready(function() { 
      $("#test").focus(); 
     }); 
    </script> 
0
<div id="txtROSComments" contenteditable="true" onkeyup="SentenceCase(this, event)"style="border: 1px solid black; height: 200px; width: 200px;"> 
    </div> 
    <script type="text/javascript"> 
     function SentenceCase(inField, e) { 
      debugger; 
      var charCode; 

      if (e && e.which) { 
       charCode = e.which; 
      } else if (window.event) { 
       e = window.event; 
       charCode = e.keyCode; 
      } 

      if (charCode == 190) { 
       format(); 
      } 
     } 

     function format() { 
      debugger; ; 
      var result = document.getElementById('txtROSComments').innerHTML.split("."); 

      var finaltxt = ""; 


      var toformat = result[result.length - 2]; 

      result[0] = result[0].substring(0, 1).toUpperCase() + result[0].slice(1); 

      if (toformat[0] != " ") { 

       for (var i = 0; i < result.length - 1; i++) { 
        finaltxt += result[i] + "."; 
       } 

       document.getElementById('txtROSComments').innerHTML = finaltxt; 
       alert(finaltxt); 
       abc(); 
       return finaltxt; 
      } 



      if (toformat[0].toString() == " ") { 
       debugger; 
       var upped = toformat.substring(1, 2).toUpperCase(); 

       var formatted = " " + upped + toformat.slice(2); 

       for (var i = 0; i < result.length - 1; i++) { 

        if (i == (result.length - 2)) { 
         finaltxt += formatted + "."; 
        } 
        else { 
         finaltxt += result[i] + "."; 
        } 

       } 
      } 
      else { 
       debugger; 
       var upped = toformat.substring(0, 1).toUpperCase(); 

       var formatted = " " + upped + toformat.slice(1); 



       for (var i = 0; i < result.length - 1; i++) { 
        if (i == (result.length - 2)) { 
         finaltxt += formatted + "."; 
        } 
        else { 
         //if(i 
         finaltxt += result[i] + "."; 
        } 

       } 

      } 
      debugger; 
      document.getElementById('txtROSComments').value = finaltxt; 
      return finaltxt; 

     } 

    </script> 
    <script type="text/javascript"> 
     function abc() { 
      document.getElementById("#txtROSComments").focus(); 
     } 

+0

Es genial tener algún código, pero sería genial si pudiera agregar un poco de explicación. –

+0

No estoy seguro de cómo encontrar la respuesta a la pregunta en este código. –

2

También se han enfrentado misma problem.To resolver este problema, coloque el código de la función setTimeout.

function showMeOnClick() { 
    // Set text filed focus after some delay 
    setTimeout(function() { jQuery('#searchTF').focus() }, 20); 
    // Do your work..... 
} 
+0

Hacer esto con un tiempo de espera es muy rápido y sucio – Unknown

+0

Sí, agregar el tiempo de espera es solo una solución porque necesitamos un tipo de evento del siguiente tic para volver a pintar el DOM para mostrar los cambios. Podemos optar por otro enfoque para resolver este problema :-) –

+0

Lo resolví aplicando un oyente "animationend" para la animación del objeto creado (porque mi objeto aparece con una animación). De esta forma se enfoca una vez que está donde se supone que debe estar. – Unknown

Cuestiones relacionadas