不可能把注意力放在输入上

时间:2014-09-01 19:29:53

标签: javascript html5

我需要你的帮助,因为我没有想法

我有以下HTML5代码

<form>
    <table class="main">
            <tr>
                    <td>Volume</td>
                    <td><input type="text" id="Q1" onblur="updateQ(Q1)" autofocus /></td>
                    <td>ml&nbsp;</td>
                    <td><input type="text" id="Q2" onblur="updateQ(Q2)" /></td>
                    <td>ml&nbsp;</td>
                    <td><input type="text" id="Qt" onblur="updateQ(Qt)" /></td>
                    <td>ml&nbsp;</td>
            </tr>
    </table>
</form>

以及以下javascript函数

function updateQ(ident) {
    var valeur = ident.value;
    var inputId = ident.id.toString();
    if (isNaN(valeur)) {
        ident.value = "";
        document.getElementById(inputId).focus();
    }
}

加载页面时,第一个&lt;输入&gt;得到焦点。 我想检查用户是否只输入号码,所以&#34; onblur&#34;我调用函数,检查内容。 如果它不是数字,我删除该值,并尝试将焦点返回到&lt;输入&gt;

它不起作用!

无法回馈焦点,第二个输入有它,它永远不会回到第一个 我没有在Javascript控制台中看到任何错误,并且其余的脚本运行良好。 即使给出真实的身份证(&#34; Q1&#34;)也不起作用......

然而,在该功能之外,将重点放在另一个&lt;输入&gt;很好地工作

有什么想法吗?

提前感谢您的帮助

ericc

3 个答案:

答案 0 :(得分:2)

请见http://jsbin.com/bapuyanuvula/1/

function updateQ(ident) {
  var valeur = ident.value;
  var inputId = ident.id.toString();
    if (isNaN(valeur)) {
      ident.value = "";
       setTimeout(function() {
        document.getElementById(inputId).focus();
    }, 0)

    }
}

用户离开时会发生onblur事件。在某些浏览器中,可以取消此事件(即:event.preventDefault())。所以你无法集中注意力,因为此时它仍然是关注的焦点。因此,要么阻止模糊事件,要么使用上面提供的setTimeout ......

答案 1 :(得分:1)

这是与浏览器相关的问题,请尝试此操作

function updateQ(ident) {
    var valeur = ident.value;
    var inputId = ident.id.toString();

    if (isNaN(valeur)) {
        ident.value = "";
        setTimeout(function(){                  
                    document.getElementById(inputId).focus();
                    },
            0);
    }
}

答案 2 :(得分:-1)

这是因为你传递了错误的引用。 改变这个:

 onblur="updateQ(Q1)"

到此:

 onblur="updateQ(this)"