2011-10-13 61 views
0

我有一个输入字段的列表,当我通过他们选项卡我想循环回到第一个,但它似乎并没有工作。焦点()似乎不工作后onblur()

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

难道你不需要在你的ID选择器上有一些#号? – sethobrien

+0

@sethobrien - 这不是jQuery ...查看问题中定义的'$'函数。 –

+0

我的不好。我使用控制台在SO页面中设置了您要描述的内容,并且在我将标签放在答案框外时,对搜索框进行聚焦似乎没有问题。你可以发布一个jsfiddle吗? – sethobrien

回答

1

我觉得你onblur事件处理程序的默认处理程序之前被调用,导致重点先切换到输入“星期一”,然后到浏览器认为应该关注的任何内容。尝试使用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并不总是将事件作为参数传递

+0

我希望有一个更优雅的答案,但它的工作原理。 – qw3n

0

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

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

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

你测试过什么浏览器?它在Firefox 7或Chromium 13中不适用于我。 – Ben

0

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

+0

在Firefox 7中,这不起作用。 “月”输入框将在“金额”框中跳出后突出显示,但无法输入。 – Ben

+0

我有Firefox 7,它适用于我,因为它在小提琴中。 –