knockout.js 如何使用javascript检查多个点并停止输入多个点?

7ivaypg9  于 2022-11-10  发布在  Java
关注(0)|答案(2)|浏览(148)

我正在输入文字类型。

<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");
               }
            }
        }

如果在文本框中输入两个“.”,它工作正常,但如何防止在文本字段中输入多个“.”?
如果有比这更好的方法,请告诉。

2vuwiymt

2vuwiymt1#

第一个
试着用这个正则表达式来求出你在string中得到了多少个点。

oyxsuwqo

oyxsuwqo2#

如果你想创建一个只允许数字的字段,你应该考虑使用type=“number”的输入,因为它们只允许有效的数字字符被添加到它的值中。在某些情况下,它甚至可能带来一个不同的视觉键盘,以便于填充,这对辅助功能和用户体验更好。数字输入字段默认情况下允许多点,这很烦人,而且比在文本字段中更难防止,所以这是一个判断可访问性和用户体验是否比添加几行额外的Javascript更重要的案例。
很多人会告诉你,限制键盘操作是不好的做法,他们是对的。当你对除了数字和"."之外的所有内容都执行preventDefault()时,你就禁用了表格字段、浏览器alt菜单、任何ctrl快捷键以及浏览器中发生的任何事情。
这个解决方案很简单,只允许数字字段中有一个点。它不阻止在数字中向后单击并在"."之前添加数字。它不阻止执行浏览器键盘快捷键,如刷新、复制和粘贴,只要粘贴的值是有效的数字。它允许在数字的正文中添加"."
唯一无法避免的行为是,如果用户在输入结束时重复按下点键,点就会闪烁。这是由于数字字段处理其值的方式所致。当用户在数字(如"13.")的末尾键入点时,javascript在查看"13"的值时只能检索到它的值,"13.."的值不是一个有效的数字,因此javascript将检索“"。这确保您要么得到一个有效的数字,要么什么都得不到。在我的解决方案中,如果一个值返回""而没有按下backspace、delete或cut,它将回滚到上一个有效值,在我的例子中是"13",从输入的值"13."获得。防止这种行为似乎几乎是不可能的,也不是一个交易破坏者,因为你可以确保你的字段值总是一个有效的单点数字。
第一个
您可以找到非常详细的注解和额外的位in this Codepen

相关问题