Focus()似乎在onblur()之后不起作用

focus() does not seem to work after onblur()

本文关键字:之后 不起作用 onblur Focus      更新时间:2023-09-26

我有一个输入字段列表,当我通过它们tab时,我想循环回到第一个,但它似乎不起作用。

这是我的HTML

<form id="form">
  <input id="mon" type="text"/> Month<br>
  <input id="day" type="text"/> Day<br>
  <input id="num" type="text"/> Year<br>
  <input id="amt" type="text"/> Amount<br>
</form>

和javascript

window.onload=function(){
  $('mon').focus();
  $('amt').onblur=function(){
    //Process the input fields
    $('mon').focus();
  }
}
function $(a){return document.getElementById(a)}

我认为您的onblur事件处理程序在默认处理程序之前被调用,导致焦点首先转移到输入'mon',然后转移到浏览器认为接下来应该关注的任何内容。尝试使用onkeypress事件。例如

window.onload=function(){
  $('mon').focus();
  $('amt').onkeydown = function(e) {
    //check for IE weirdness
    if (e === undefined && event !== undefined)
      e = event;
    if (e.keyCode == 9) {
      $('mon').focus();
      return false;
    }
  }
}
function $(a){return document.getElementById(a)}

编辑:onkeydown实际上似乎在更多的浏览器工作

编辑2:增加IE大小写。IE并不总是将事件作为参数传递

要使光标出现在第一个输入框上,您需要将输入框的值赋给它自己(hack)。您还需要"返回false"来停止事件传播。修改后的模糊函数如下,

<input id="mon" type="text" onfocus="this.value=this.value;" />
$('amt').onblur = function(){ $('mon').focus(); return false; }

看看这个小提琴。我认为这是你想要达到的目标。http://jsfiddle.net/CucuIonel/7Fpu3/7/