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();