onblur()后,focus()似乎不起作用

时间:2011-10-13 15:40:52

标签: javascript

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

这是我的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)}

3 个答案:

答案 0 :(得分:1)

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

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并不总是将事件作为参数传递

答案 1 :(得分:0)

要使光标出现在第一个输入框中,您需要将输入框的值分配给自身(hack)。您还需要“返回false”来停止事件传播。修改后的模糊功能如下,

<input id="mon" type="text" onfocus="this.value=this.value;" />

$('amt').onblur = function(){ $('mon').focus(); return false; }

答案 2 :(得分:0)

看看这个小提琴。我想这就是你想要实现的目标。 http://jsfiddle.net/CucuIonel/7Fpu3/7/