javascript - 将文本字段限制为一位小数点输入(代码适用于 Safari,但不适用于 Firefox)

标签 javascript firefox text decimal-point

我有以下 JavaScript 代码,用于帮助将文本输入限制为单个小数点,已上传到我的测试服务器 cogwheelmedia.net/Survey/numerickey.php

虽然它在 Safari 中工作,但在 Firefox 中似乎不起作用。我需要进行哪些更改才能使其在所有浏览器中运行?

<body>
<p>
   <script type="text/javascript">
function OnTextNumericKeyPress(evt) {
         var theEvent = evt || window.event;
         var rv = true;
var key = (typeof theEvent.which === 'undefined') ? theEvent.keyCode : theEvent.which;
         if (key && (key !== 8)) {
             var keychar = String.fromCharCode(key);
             var keycheck = /[.0-9]/;
             if (!keycheck.test(keychar) || (keychar == '.' && evt.srcElement.value.indexOf('.') > -1)) {     
        rv = theEvent.returnValue = false; //for IE
           if (theEvent.preventDefault) theEvent.preventDefault(); //Firefox 
 } else {
 var number = evt.srcElement.value.split('.');
 if (number.length == 2 && number[1].length > 1) {
     rv = theEvent.returnValue = false; //for IE
     if (theEvent.preventDefault) theEvent.preventDefault(); //Firefox
     }
 }
         return rv;
     }


function ValidateDecimal(o) {
    if (o.value.length > 0) {
         var objReg = /^\d+(\.\d{1,2})?$/;
         if (objReg.test(o.value))                               
             o.style.backgroundColor='';
         else
         o.style.backgroundColor='red';
         return false;
     } 
}
}
</script>
  <input name="txtPrice" ID="txtPrice" type="text" runat="server" MaxLength="8" onfocusout="return OnTextNumericKeyPress(event);" onBlur="return OnTextNumericKeyPress(event);" onKeyPress="return OnTextNumericKeyPress(event);" onkeyup="ValidateDecimal(this);"/> 
</p>
</body>
</html>

最佳答案

简单地组织一下代码。 首先,我建议您使用括号,因为它们是免费的;第二:使用缩进,它也是免费的。另一个技巧是在执行过程中不需要重新定义的变量只声明一次,否则您将失去通过避免括号和缩进而获得的所有空间。

从调试器中很容易看出,函数 validateDecimal 未定义,这是因为它位于 OnTextNumericKeyPress 内部:您无法使用看不到的内容。

这里是代码,希望现在它能按预期工作:

<script type="text/javascript">
var objReg = /^\d+(\.\d{1,2})?$/;
var keycheck = /[.0-9]/;
var rv = true;

function OnTextNumericKeyPress(evt) {
    var theEvent = evt || window.event;
    var key = (typeof theEvent.which === 'undefined') ? theEvent.keyCode : theEvent.which;
    if (key && (key !== 8)) {
         var keychar = String.fromCharCode(key);
         if (!keycheck.test(keychar) || 
            (keychar == '.' && evt.srcElement.value.indexOf('.') > -1)) {     
                rv = theEvent.returnValue = false; //for IE
                if (theEvent.preventDefault) theEvent.preventDefault(); //Firefox 
        }else{
            var number = evt.srcElement.value.split('.');
            if (number.length == 2 && number[1].length > 1) {
                rv = theEvent.returnValue = false; //for IE
                if (theEvent.preventDefault) theEvent.preventDefault(); //Firefox
            }
        }
    return rv;
    }
}
function ValidateDecimal(o) {
    if (o.value.length > 0) {
         if (objReg.test(o.value)){                               
             o.style.backgroundColor='';
         }else{
             o.style.backgroundColor='red';
         }
         return false;
     } 
}
</script>
<p>
  <input name="txtPrice" ID="txtPrice" type="text" runat="server" MaxLength="8"
   onfocusout="return OnTextNumericKeyPress(event);" 
   onBlur="return OnTextNumericKeyPress(event);" 
   onKeyPress="return OnTextNumericKeyPress(event);" 
   onkeyup="ValidateDecimal(this);"/> 
</p>

关于javascript - 将文本字段限制为一位小数点输入(代码适用于 Safari,但不适用于 Firefox),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17276076/

相关文章:

c# - 无法使用 System.Data.Sqlite 访问(Firefox 的)Sqlite 数据库

javascript - 无法在 FireFox 中建立与 socket.io 的连接(xhr 轮询错误)

java - 如何读取文本文件中的特定行并返回其中的一部分?

c++ - 如何从文本文件中读取矩阵并将其存储到二维数组中?

javascript - 如何使用 Meteor 发送文本?

javascript - Angular 2 : what expressions can we interpolate in template

javascript - 使用 flatMap 链接可观察量

javascript - 为什么 jQuery .cycle() 插件在我的网站上运行不佳?

javascript - 打印警报框以响应 yii2 中的 ajax 调用

javascript - document.getElementById 对于已知元素返回 null - 为什么?