document.getElementById(id).focus()不适用于firefox或chrome

SKS*_*KSK 54 javascript

当我做onchange事件时,它进入该函数的验证,但焦点不是我正在使用 document.getElementById('controlid').focus();

我使用的是Mozilla Firefox和谷歌浏览器,两者都无效.我不想要任何IE浏览器.任何人都可以告诉我我的原因是什么.

提前致谢

这是代码:

var mnumber = document.getElementById('mobileno').value; 
if(mnumber.length >=10) {
    alert("Mobile Number Should be in 10 digits only"); 
    document.getElementById('mobileno').value = ""; 
    document.getElementById('mobileno').focus(); 
    return false; 
}
Run Code Online (Sandbox Code Playgroud)

And*_*y E 88

尝试使用计时器:

var mnumber = document.getElementById('mobileno').value;
if (mnumber.length >=10) 
{ 
    alert("Mobile Number Should be in 10 digits only");
    document.getElementById('mobileno').value = "";
    window.setTimeout(function ()
    {
        document.getElementById('mobileno').focus();
    }, 0);
    return false;
}
Run Code Online (Sandbox Code Playgroud)

当线程空闲时,将运行计数为0的计时器.如果这没有帮助,请尝试在onblur事件中使用代码(使用计时器).

  • 我不明白为什么会这样,但也是如此. (8认同)
  • 可以在此处找到解释 /sf/ask/2376895531/ 和此处 /sf/ask/54556561/ /为什么-is-settimeoutfn-0-有时有用 (2认同)

小智 47

如果focus()不工作就要提两件事:

  • 附加到父级后使用此功能
  • 如果选择了控制台,则在刷新页面后,元素将无法获得焦点,因此在测试时选择(单击)该网页

这种方式适用于Firefox和Chrome,无需任何操作setTimeOut().

  • 在Chrome中关闭控制台确实解决了这个奇怪的问题. (22认同)
  • 该死!你节省了我几个小时的调试,实际上当选择控制台时,焦点方法不起作用.如果我认识你,我会给你买啤酒! (5认同)
  • 我也打开了Firefox开发工具(即`console`),关闭它为我解决了问题 (5认同)
  • 我总是忘记控制台 -.- 谢谢你记住我 =) (2认同)
  • 感谢您对控制台的澄清。因为我想知道为什么我的简单 a[0].focus() 不起作用 (2认同)

小智 28

window.setTimeout(function () { 
    document.getElementById('mobileno').focus(); 
}, 0); 
Run Code Online (Sandbox Code Playgroud)

这对我也有用.Firefox会设置我的元素的值,但不会关注它.


aex*_*exl 12

我的情况有点不同.我正在尝试focus()从浏览器开发人员控制台中输入.原来它以某种方式干扰了输入,一旦我最小化了控制台,一切都按预期工作.我知道这不是一个程序化的解决方案,但如果有人像我一样在搜索引擎上发现了这个问题,那么这些信息可能会有所帮助.

  • 这实际上就是答案!Chrome开发工具正在阻止焦点操作. (3认同)

小智 11

并非所有元素都是可聚焦的,但默认情况下,有一个tabindex属性可以解决这个问题.

将tabindex =分配给元素时:

它变得可以集中精力.用户可以使用Tab键从具有较小正tabindex的元素移动到下一个元素.例外是一个特殊值tabindex ="0"表示该元素将始终为最后一个.tabindex = -1表示元素变为可聚焦,但tab键将始终跳过它.只有focus()方法才有效


jus*_*ard 10

要添加到此列表以检查的另一件事:

确保您尝试聚焦的元素不是它本身,也不包含在您尝试聚焦它时具有“display:none”的元素中。