gpt4 book ai didi

Javascript 函数在输入时仅允许在文本框中输入具有 2 个小数点的十进制数

转载 作者:行者123 更新时间:2023-11-28 08:02:01 25 4
gpt4 key购买 nike

我有一个 asp 文本框,我想设置一个 javascript 函数,只允许人们输入小数点后 2 个数字的十进制值。例如:

43432131 - 好

54525582.23 - 好

3423.3 - 好

.23 - 好

45573490.343 - 坏

34.34.34 - 坏

345..23 - 坏

你明白了。我有一个现有的函数,其中的正则表达式可以工作。

    function fnCurrencyOnly(o) {
var sValue = o.value;
var sKey = String.fromCharCode(window.event.keyCode);

if (document.selection.createRange().text == sValue) {
sValue = sKey;
}

else {
sValue = sValue + sKey;
}

var re = new RegExp("^\\d+(?:\\.\\d{0,2})?$");
if (!sValue.match(re))
window.event.returnValue = false;
}

我将其设置为 C# 代码中的按钮,后面带有

    private void AddAttributes()
{
txtRate.Attributes.Add("onkeypress", "fnCurrencyOnly(this)");
}

只要您从头到尾输入整个数字,此操作就有效。但是,例如,如果您有 100.00,并将光标放在 1 和零之间并输入 2,尝试将值设置为 1200.00(这是完全有效的),它不会让您输入 2。原因在于javascript 函数,它执行 svalue + skey 操作,它只是将您输入的内容添加到末尾。所以在这种情况下,它实际上是在验证 100.002,这当然是错误的。我无法找到一种方法来检查按键的值是什么,并根据正则表达式进行检查。我知道我可以在 keyup 上执行此操作,但是如果它无效,我该如何恢复到旧值?

最佳答案

好吧,我找到了自己的答案:

    function doGetCaretPosition(oField) {
// Initialize
var iCaretPos = 0;

// IE Support
if (document.selection) {
oField.focus(); // Set focus on the element
var oSel = document.selection.createRange(); // To get cursor position, get empty selection range
oSel.moveStart("character", -oField.value.length); // Move selection start to 0 position
iCaretPos = oSel.text.length; // The caret position is selection length
}

// Firefox support
else if (oField.selectionStart || oField.selectionStart == "0") {
iCaretPos = oField.selectionStart;
}

// Return results
return (iCaretPos);
}

function fnCurrencyOnly(o) {
var sValue = o.value;
var sKey = String.fromCharCode(window.event.keyCode);
var pos = doGetCaretPosition(o);

if (document.selection.createRange().text == sValue) {
sValue = sKey;
}
else {
sValue = sValue.substr(0, pos) + sKey + sValue.substr(pos);
}

var re = new RegExp("^\\d+(?:\\.\\d{0,2})?$");

if (!sValue.match(re))
window.event.returnValue = false;
}

来自: https://codinglifestyle.wordpress.com/2009/04/24/currency-textbox-with-javascript/#comment-2064

工作完美,只是您仍然可以在框中复制并粘贴无效内容。接下来将尝试找到解决方案。

关于Javascript 函数在输入时仅允许在文本框中输入具有 2 个小数点的十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25269800/

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