document.getElementById(id).focus()不适用于Firefox或Chrome

当我做onchange事件时,它的内部函数validation,但是重点不在于我正在使用document.getElementById('controlid').focus();

我正在使用Mozilla Firefox和Google Chrome,两者都不起作用。 我不想要任何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; } 

尝试使用计时器:

 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; } 

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

如果focus()不工作,提供两件事情:

  • 追加到父项后使用此function
  • 如果select了控制台,刷新页面后,元素将无法获得焦点,因此在testing时select(点击)网页

这种方式适用于Firefox和Chrome,而不需要任何setTimeOut()

 window.setTimeout(function () { document.getElementById('mobileno').focus(); }, 0); 

这也适用于我。 Firefox会设置我的元素的值,但不会把重点放在它。

并不是所有的元素都是可调焦的,但默认情况下,有一个tabindex属性来解决这个问题。

当您将tabindex =分配给一个元素时:

它变得可以聚焦。 用户可以使用Tab键从具有较小正tabindex的元素移动到下一个元素。 例外是一个特殊的值tabindex =“0”意味着元素将永远是最后的。 tabindex = -1意味着一个元素变得可以聚焦,但是这个tab键总是会跳过它。 只有focus()方法才有效

我的情况有点不同 我试图从浏览器开发人员控制台中focus()input。 原来,这是干扰input不知何故,一旦我最小化控制台一切都按预期工作 。 我知道这不是一个程序化的解决scheme,但是如果有人像我一样在search引擎上发现了这个问题,这个信息可能会有帮助。

在javascript中重新获得重新input密码的文本框:

 window.setTimeout(function() { document.forms["reg"]["retypepwd"].focus(); },0); 

这里,registry是registry的名称。

我知道这可能是一个深奥的用例,但是我在使用Angular 2框架的时候需要一个input来获得焦点。 调用焦点()根本不起作用,不pipe我做了什么。

最终我意识到angular是抑制它,因为我没有在input上设置[(ngModel)]。 设置一个解决了它。 希望它可以帮助别人。

你想在DOM完成加载之前引用元素吗?

你的代码应该以body加载(或者在DOM加载时应该执行的另一个函数,比如jQuery中的$(document).ready()

 body.onload = function() { // your onchange event handler should be in here too 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; } } 

确保你使用“id”和“getElementById”如下所示:

 <FORM id="my_form" name="my_form" action=""> <INPUT TYPE="text" NAME="somefield" ID="somefield" onChange="document.getElementById('my_form').submit();"> </FORM> 

还有一件事要添加到这个列表来检查:

确保你试图对焦的元素不是自己,也不是在你试图对焦的元素中包含“display:none”的元素。

添加一个控件,在那里你要设置焦点,然后改变它的属性,如下所示

 <asp:TextBox ID="txtDummy" runat="server" Text="" Width="2" ReadOnly="true" BorderStyle="None" BackColor="Transparent"></asp:TextBox> 

在代码隐藏中,只需调用像下面的txtDummy.Focus()

这个方法在所有浏览器中都有效。

你的重点是在返回false之前工作。 之后,这是行不通的。 你试试这个解决scheme。 控制后返回false;

把代码放在function:

 function validateNumber(){ var mnumber = document.getElementById('mobileno').value; if(mnumber.length >=10) { alert("Mobile Number Should be in 10 digits only"); document.getElementById('mobileno').value = ""; return false; }else{ return true; } } 

来电function:

 function submitButton(){ if(!validateNumber()){ document.getElementById('mobileno').focus(); return false; } } 

HTML:

 Input:<input type="text" id="mobileno"> <button onclick="submitButton();" >Submit</button> 

我怀疑这是因为浏览器渲染运行在与javascript相同的线程上,setTimeout(function(){},0); 当浏览器空闲时,将setTimeout中的javascript函数排队执行。 如果有人有更深入的解释,请分享。

 setTimeout(function(){ if(document.getElementById('mobileno')){ document.getElementById('mobileno').focus(); } },0); 

把这个源放在你的模态之上:

 <script> $('body').on('shown.bs.modal', '#IdYourModal', function () { document.getElementById('mobileno').focus(); }) </script> 

我也推荐你jQuery的focus()函数。 你的生活会变得更简单:)前段时间,我的焦点问题(W / O jQuery),我放弃了。

上面提到的超时在Chrome上解决了这个问题。 在IE8或FF3上不存在问题。 感谢您一如既往的提示。 我设置焦点的代码是: window.setTimeout(function() { document.form1.password.focus(); },0);

如果您有权访问jQuery或Zepto.js,则可以使用

 $('#mobileno').focus();