2014-09-01 51 views
2

这里我需要你们的帮助,因为我出的想法不可能给焦点输入

我有以下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(); 
    } 
} 
以下

当页面被加载时,第一个<输入>获得焦点。 我想检查用户是否只输入数字,所以“onblur”我称之为检查内容的函数。 如果它不是一个数字,我删除了价值,我试着给回焦点到<输入>

它不工作!

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

然而,出功能,让焦点移到另一个<输入>作品很好

任何想法?

在此先感谢您的帮助

ericc

+0

参数的ident只是一个字符串我猜。据我所知,你不能得到一个字符串的.value和.id。编辑:使用Matteo Tassinaris解决方案! – TheFrozenOne 2014-09-01 19:34:08

+0

您可以创建一个[jsFiddle](http://jsfiddle.net/)或等价物来重现问题吗?另外,您使用的是哪种浏览器? – Ryan 2014-09-01 19:35:07

+0

看起来不错:http://jsfiddle.net/cphnwmwm/ – dfsq 2014-09-01 19:37:16

回答

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如上提供...

+0

你能解释为什么这会改变什么吗? – Ryan 2014-09-01 19:40:45

+1

我解释了它;-) – 2014-09-01 19:41:52

+0

这个工程!完善。所以一个Firefox问题:-(我在这2天以来,感谢很多 – ericc 2014-09-01 20:19:59

-1

它,因为你是passsing错误的参考。 更改此:

onblur="updateQ(Q1)" 

这样:

onblur="updateQ(this)" 
+0

也许是更好的做法,但它们是等效的。 – Ryan 2014-09-01 19:36:14

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); 
    } 
} 
+0

相同的解决方案...感谢您的答案! – ericc 2014-09-01 20:21:25