我正在输入文字类型。
<input type="text" class="checkForDot" />
我想做的是,当用户输入数字到框中,然后找到字段中的“.”,如果它包含多个“.",然后防止它输入另一个“.”在文本字段中。
我jquery代码是:
$(".checkForDot").on("keyup", function (event) {
CheckForDot($(this).val());
});
function CheckForDot(value) {
if (value != null || value != '') {
var str = value.toString();
if (str.indexOf('.', str.indexOf('.') + 1) != -1) {
console.log("ok");
}
}
}
如果在文本框中输入两个“.”,它工作正常,但如何防止在文本字段中输入多个“.”?
如果有比这更好的方法,请告诉。
2条答案
按热度按时间2vuwiymt1#
第一个
试着用这个正则表达式来求出你在string中得到了多少个点。
oyxsuwqo2#
如果你想创建一个只允许数字的字段,你应该考虑使用type=“number”的输入,因为它们只允许有效的数字字符被添加到它的值中。在某些情况下,它甚至可能带来一个不同的视觉键盘,以便于填充,这对辅助功能和用户体验更好。数字输入字段默认情况下允许多点,这很烦人,而且比在文本字段中更难防止,所以这是一个判断可访问性和用户体验是否比添加几行额外的Javascript更重要的案例。
很多人会告诉你,限制键盘操作是不好的做法,他们是对的。当你对除了数字和
"."
之外的所有内容都执行preventDefault()
时,你就禁用了表格字段、浏览器alt菜单、任何ctrl快捷键以及浏览器中发生的任何事情。这个解决方案很简单,只允许数字字段中有一个点。它不阻止在数字中向后单击并在
"."
之前添加数字。它不阻止执行浏览器键盘快捷键,如刷新、复制和粘贴,只要粘贴的值是有效的数字。它允许在数字的正文中添加"."
。唯一无法避免的行为是,如果用户在输入结束时重复按下点键,点就会闪烁。这是由于数字字段处理其值的方式所致。当用户在数字(如
"13."
)的末尾键入点时,javascript在查看"13"
的值时只能检索到它的值,"13.."
的值不是一个有效的数字,因此javascript将检索“"。这确保您要么得到一个有效的数字,要么什么都得不到。在我的解决方案中,如果一个值返回""
而没有按下backspace、delete或cut,它将回滚到上一个有效值,在我的例子中是"13"
,从输入的值"13."
获得。防止这种行为似乎几乎是不可能的,也不是一个交易破坏者,因为你可以确保你的字段值总是一个有效的单点数字。第一个
您可以找到非常详细的注解和额外的位in this Codepen