jquery .focus()无法正常工作的原因是什么?

dng*_*goo 34 jquery focus

有些想法是ELEMENT_ID.focus()是在特定时间隐藏的div内部.

这应该是一个容易解决的问题 - 但我正在努力:(

***代码工作正常 - 文本字段没有关注页面加载.

第1步[求助] JAVASCRIPT:

$("#goal-input").focus();

$('#goal-input').keypress(function(event){
 var keycode = (event.keyCode ? event.keyCode : event.which);
  if(keycode == '13') {
etc, etc, etc
}
Run Code Online (Sandbox Code Playgroud)

HTML

<input type="text" id="goal-input" name="goal" />
Run Code Online (Sandbox Code Playgroud)

[STEP2] JAVASCRIPT:

 if (goal) {
          step1.fadeOut('fast', function() {
          step1.hide();
          step2.fadeIn('fast');

etc, etc
Run Code Online (Sandbox Code Playgroud)

HTML:

  <div id="step-2">
        <div class="notifications">
        </div>
        <input type="text" id="name"   name="name" placeholder="Name" />
               <script type="text/javascript">
              $(function(){
              $("#name").focus();
              });
            </script>
Run Code Online (Sandbox Code Playgroud)

为什么第2步不起作用?:(

Nic*_*k F 40

我在触发焦点转移到页面中的元素(表单输入)时遇到了问题.我发现它可以通过从setTimeout内部调用焦点事件而没有延迟来修复.根据我的理解(例如,从这个答案),这会延迟函数直到当前执行队列结束,因此在这种情况下它会延迟焦点事件直到转换完成.

setTimeout(function(){
    $('#goal-input').focus();
});
Run Code Online (Sandbox Code Playgroud)

  • 如果你在这种情况下使用任意的,基于试验和错误的超时值,那么在某些情况下,对于某些人来说几乎肯定会失败(即,在您的机器上,600毫秒将是适合您的价值,在你的网络上).最好弄清楚为什么上面的工作不起作用(可能你有其他影响页面状态的东西也会阻碍,或者你的setTimeout可能在错误的位置). (4认同)

jga*_*fin 16

如果使用文档加载事件,您需要将代码放在HTML下面或加载:

<input type="text" id="goal-input" name="goal" />
<script type="text/javascript">
$(function(){
    $("#goal-input").focus();
});
</script>
Run Code Online (Sandbox Code Playgroud)

更新:

切换div不会触发文档加载事件,因为所有内容都已加载.切换div时需要关注它:

if (goal) {
      step1.fadeOut('fast', function() {
          step1.hide();
          step2.fadeIn('fast', function() {  
              $("#name").focus();
          });
      });
}
Run Code Online (Sandbox Code Playgroud)

  • 我会尽可能地说所有与DOM相关的代码都应该放在DOM加载处理程序中,而不管它与目标的相对位置如何.:) (2认同)

n0m*_*mad 7

不要忘记输入字段必须首先可见,然后您才能将其聚焦.

$("#elementid").show();
$("#elementid input[type=text]").focus();
Run Code Online (Sandbox Code Playgroud)


Moh*_*had 6

这解决了!!!

setTimeout(function(){
    $("#name").filter(':visible').focus();
}, 500);
Run Code Online (Sandbox Code Playgroud)

您可以相应地调整时间。