Javascript 无法对输入进行聚焦

Javascript 无法对输入进行聚焦,javascript,html,Javascript,Html,我需要你的帮助,因为我不知道 我有以下HTML5代码 <form> <table class="main"> <tr> <td>Volume</td> <td><input type="text" id="Q1" onblur="updateQ(Q1)" autofocus /></td>

我需要你的帮助,因为我不知道

我有以下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>
加载页面时,第一个获得焦点。 我想检查用户是否只输入了数字,所以我调用了“onblur”函数来检查内容。 如果它不是一个数字,我移除该值,并尝试将焦点返回到

它不起作用

不可能返回焦点,第二个输入有它,它永远不会返回到第一个 我在Javascript控制台中没有看到任何错误,脚本的其余部分工作得很好。 即使给出真实的id(“Q1”)也不起作用

然而,在函数之外,将焦点交给另一个会很好地工作

有什么想法吗

提前谢谢你的帮助


ericc

这是因为您传递了错误的引用。 更改此项:

 onblur="updateQ(Q1)"
为此:

 onblur="updateQ(this)"
请看这里


onblur事件在用户离开时发生。在某些浏览器中,可以取消此事件(即:event.preventDefault())。所以你不能聚焦它,因为此时它仍然聚焦。因此,您可以防止模糊事件或使用上面提供的设置超时…

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

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

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

我猜参数ident只是一个字符串。据我所知,您无法获取字符串的.value和.id。编辑:使用Matteo Tassinaris解决方案!请您创建一个或等效的重新创建问题,好吗?另外,您使用的是哪种浏览器?看起来不错:不管怎样,都看不出问题出在哪里,清除输入和窃取焦点会造成非常糟糕的用户体验。而是考虑将某种错误样式应用到适当的消息中,防止表单被提交,直到事情被修复为止;如果得到支持,HTML5验证将为您解决这一问题。但是,如果您觉得必须强制更改用户的焦点,仍然不能清除文本框。也许可以进行更好的练习,但它们是等效的。您能解释为什么这会改变任何事情吗?这很有效!!完美的Firefox的一个问题是:-(我从两天开始关注这个问题,非常感谢
function updateQ(ident) {
  var valeur = ident.value;
  var inputId = ident.id.toString();
    if (isNaN(valeur)) {
      ident.value = "";
       setTimeout(function() {
        document.getElementById(inputId).focus();
    }, 0)

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

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