gpt4 book ai didi

javascript - JQuery 只允许小数点后两位数字

转载 作者:行者123 更新时间:2023-12-03 21:31:16 24 4
gpt4 key购买 nike

我发现了以下 JQuery 函数 here这可以防止用户输入任何非数字或单个小数的内容。该函数运行良好,但我想改进它以防止用户输入 3 位或更多小数位,即不允许 99.999 并允许 99.99。有什么想法吗?

 function checkForInvalidCharacters(event, inputBox){                            
if ((event.which != 46 || inputBox.val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
event.preventDefault();
}
};

最佳答案

逻辑是每次用户输入数字时,您都必须检查两件事。

  1. 用户是否输入了小数点?
  2. 小数位数是否超过两位?

对于第一个,您可以使用 $(this).val().indexOf('.') != -1

对于第二个,您可以使用 $(this).val().substring($(this).val().indexOf('.'), $(this).val().indexOf('.').length).length > 2

EDIT-1
另外,您必须添加 event.which != 0 && event.which != 8这样箭头键和退格键就可以在 Firefox 中使用(Manoj 评论)

EDIT-2
另外,您必须添加 $(this)[0].selectionStart >= text.length - 2这样,如果光标位于小数点左侧,则可以添加数字(BIdesi 注释)

EDIT-3
另外,您必须检查用户是否删除了 .并将其放置在其他位置,创建小数点后超过 2 位数字的值。所以你必须添加 $this.val($this.val().substring(0, $this.val().indexOf('.') + 3));用于削减额外的数字(吉尔伯托·桑切斯评论)

EDIT-4
要处理粘贴的数据,您必须绑定(bind)粘贴事件处理程序。然后您必须检查粘贴的数据是否有 .text.indexOf('.') > -1小数点后 2 位以上为 text.substring(text.indexOf('.')).length > 3 。如果是这样,你必须削减额外的数字。此外,您还必须检查用户是否使用 $.isNumeric() 输入了数字输入(darasd 评论)。

这是代码:

$('.number').keypress(function(event) {
var $this = $(this);
if ((event.which != 46 || $this.val().indexOf('.') != -1) &&
((event.which < 48 || event.which > 57) &&
(event.which != 0 && event.which != 8))) {
event.preventDefault();
}

var text = $(this).val();
if ((event.which == 46) && (text.indexOf('.') == -1)) {
setTimeout(function() {
if ($this.val().substring($this.val().indexOf('.')).length > 3) {
$this.val($this.val().substring(0, $this.val().indexOf('.') + 3));
}
}, 1);
}

if ((text.indexOf('.') != -1) &&
(text.substring(text.indexOf('.')).length > 2) &&
(event.which != 0 && event.which != 8) &&
($(this)[0].selectionStart >= text.length - 2)) {
event.preventDefault();
}
});

$('.number').bind("paste", function(e) {
var text = e.originalEvent.clipboardData.getData('Text');
if ($.isNumeric(text)) {
if ((text.substring(text.indexOf('.')).length > 3) && (text.indexOf('.') > -1)) {
e.preventDefault();
$(this).val(text.substring(0, text.indexOf('.') + 3));
}
}
else {
e.preventDefault();
}
});
.number {
padding: 5px 10px;
font-size: 16px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="number" />

关于javascript - JQuery 只允许小数点后两位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21796827/

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