0

我有一堆的HTML数量投入,我已经JavaScript不能应用现有功能的onkeyup

x=document.querySelectorAll('input[type="number"]'); 

抓住它们,我试着通过这一个for循环,并应用迭代一个onkeyup函数。该功能是这样的:

t=function(elem){ 


elem.onkeyup=function(e) { 
    if(!/[\d\.]/.test(String.fromCharCode(e.which))) { 
    elem.value=''; 
} 
}; 
}; 

基本上,它的作用是清除输入的值如果在输入我知道我可以通过HTML

<input type='number' onkeyup='t(this)'/> 

但应用它怎么能信。我用JavaScript做到了吗?我试图通过它迭代

x=document.querySelectorAll('input[type="number"]'); 
for(i=0; i<x.length; i++){ 
    x[i].onkeyup=t(this); 
} 

但它不起作用。我究竟做错了什么?我怎样才能做到这一点?请只定期提供JavaScript解答,不要使用jQuery或其他框架/库。

+0

顺便说一句,THI s创建非常差的UI体验,用户仍然可以通过复制,粘贴或拖放来输入非数字字符。最好在完成输入数据并提示错误时检查结果,而不要试图超出用户的想象。 – RobG

+0

查看'input'事件来替换'keyup' – dandavis

回答

1

变化

x[i].onkeyup=t(this); 

x[i].onkeyup=t(x[i]); 

因为this是不是你希望它是

+0

似乎不适合我。你可以做一个演示或什么?我敢肯定我错过了一些小... – Leshy

+0

没关系,我找到了答案 – Leshy

0

道歉什么,一切。我找到了我的答案。与Jaromanda X同意,我需要改变

x[i].onkeyup=t(this); 

x[i].onkeyup=t(x[i]); 

这(双关语意)是问题的一部分,但主要问题是有效的属性名称是

keyup=function(); 

,而不是

onkeyup=function(){}'