Javascript 无法将现有函数应用于 onkeyup

Posted

技术标签:

【中文标题】Javascript 无法将现有函数应用于 onkeyup【英文标题】:Javascript can't apply an existing function to onkeyup 【发布时间】:2015-12-03 12:02:34 【问题描述】:

我有一堆 html 数字输入,我已经通过

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 或其他框架/库。

【问题讨论】:

顺便说一句,这会造成非常糟糕的 UI 体验,用户仍然可以通过复制粘贴或拖放来输入非数字字符。最好在他们完成输入数据并提出错误建议后检查结果,而不是试图超越——思考用户。 查看 input 事件以替换 keyup 【参考方案1】:

改变

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

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

因为this 不是你想要的样子

【讨论】:

似乎对我不起作用。能不能做个demo之类的?我确定我错过了一些小东西......【参考方案2】:

抱歉,大家。我找到了我的答案。同意 Jaromanda X,我需要改变

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

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

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

keyup=function();

而不是

onkeyup=function()'

【讨论】:

以上是关于Javascript 无法将现有函数应用于 onkeyup的主要内容,如果未能解决你的问题,请参考以下文章

将 javascript 函数应用于 html 元素

无法将媒体特定样式应用于禁用 Javascript 时出现的错误页面

将 javascript 函数应用于可拖动副本

React Native 架构演进

无法将动作连接到 Xcode 6.1.1 中的现有函数

将具有多个参数的函数应用于多列以创建新列[重复]