gpt4 book ai didi

javascript - 强制焦点保留在表单文本元素上,直到该值为数字

转载 作者:行者123 更新时间:2023-12-01 04:05:04 24 4
gpt4 key购买 nike

我有一个表单,其中的输入字段仅需要数字。

当字段值发生变化时,我使用 JavaScript 来验证表单。如果该值为数字,则不执行任何操作。

如果该值不是数字,请将其设置为零并将焦点置于该文本字段中。本质上,我试图将光标捕获在该字段中,直到输入数值。由于某种未知的原因,焦点没有放在该表单元素上。 cell.focus() 不起作用。我什至尝试过 document.getElementById(cel.getAttribute("ID")).focus(); 我可能做错了什么?

<html>        
<head>
<script>
function NAN(cell){
if (cell.value != "") {
var re = /^(0|[1-9][0-9]*)$/;
if (re.test(cell.value) == false) {
alert('You must supply a numeric value greater than 0.');
cell.value = "0";
cell.focus();

}
}
}
</script>
</head>

<body>
<input type="text" name="num" value="" onchange="NAN(cell)"/>
</body>
</html>

最佳答案

您的问题出在 onchange 属性中:

<input type="text" name="num" value="" onchange="NAN(cell)"/>

该值直接作为 JavaScript 代码执行。您传递的是代码,而不仅仅是通用签名或原型(prototype)。

在这些事件处理程序片段中,定义了一个特殊的对象 this,它引用当前 DOM 元素(本例中的 input 标签)。

(顺便提一下,还有第二个预定义对象事件,这很可能会引起您的困惑。)

作为解决问题的简单方法,请在调用中将 cell 替换为 this,它应该可以工作:

<input type="text" name="num" value="" onchange="NAN(this)"/>
<小时/>

还需要注意的是,您应该记住此验证需要执行 JavaScript。如果禁用,用户仍可能传递任何值,因此您还应该检查值服务器端(假设这不仅仅是客户端代码)。

作为使用 JavaScript 的替代方案,您可以使用 HTML5 强制输入特定模式。在这种情况下,这将是微不足道的:

<input type="text" name="num" value="" pattern="(?!0)\d+" title="Quantity">

除非模式经过验证,否则用户将无法提交表单,因此无需强制输入焦点。该模式从开始到结束始终必须与完整值匹配。 title 属性通常用于在错误弹出窗口中提供更多信息。

关于javascript - 强制焦点保留在表单文本元素上,直到该值为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41903301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com