Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript的十进制验证未按预期工作_Javascript_Asp.net - Fatal编程技术网

使用javascript的十进制验证未按预期工作

使用javascript的十进制验证未按预期工作,javascript,asp.net,Javascript,Asp.net,大家好,我已经写了一个脚本,只允许文本框中的小数点 function onlyDecimal(evt) { if (!(evt.keyCode == 46 || (evt.keyCode >= 48 && evt.keyCode <= 57))) return false; var parts = evt.srcElement.value.split('.'); if (parts.length

大家好,我已经写了一个脚本,只允许文本框中的小数点

function onlyDecimal(evt) {
        if (!(evt.keyCode == 46 || (evt.keyCode >= 48 && evt.keyCode <= 57)))
            return false;
        var parts = evt.srcElement.value.split('.');
        if (parts.length > 2)
            return false;
        if (evt.keyCode == 46)
            return (parts.length == 1);
        if (parts[0].length >= 15)
            return false;
        if (parts[1].length >= 3)
            return false;
    }

<asp:TextBox ID="txtDecimal" runat="server" OnKeyPress="return onlyDecimal(event)" />
但我想限制以下小数点后的数字仅为小数点前3位,它最多可以接受15位数字,因此有人可以帮助我,如以下
1234.12312345.123
等等

此外,如果我输入
12.123
并试图编辑小数部分,则在清除该值之前,不允许编辑该值

您可以在文本框中添加“FilterNumber”类,并实现jquery以实现您的功能

<asp:TextBox ID="txtDecimal" CssClass="FilterNumber" runat="server" />

$(".FilterNumber").live("keypress", function (e) {    
    var caretPosition = doGetCaretPosition(this);
    var code = (code ? code : e.which);
    //if it is delete,navigation keys always allow 
    if (code == 0 || code == 8)
        return true;
    var Value = $(this).val();
    if (Value.indexOf('.') != -1) {
        var splt = Value.split('.');
        var indexofDot = Value.indexOf('.');
        if (caretPosition > indexofDot) {
        //allow only three character after .
            if (splt[1].length > 2) {
                return false;
            }
        }
        else {
            //allow only fifteen character before .
            if (splt[0].length > 14) {
                return false;
            }
        }
    }
    if (code != 46 && code > 31 && (code < 48 || code > 57))
        return false;
    //if it is (.)
    else if (code == 46) {
        var Value = $(this).val();
        //if value already contains (.) character
        if (Value.indexOf('.') != -1) {
            var splt = Value.split('.');
            //if there is already(.) char then return false
            if (splt.length >= 2)
                return false;
        }
    }
    return true;
});
您可以在文本框中添加“FilterNumber”类,并实现jquery以实现您的功能

<asp:TextBox ID="txtDecimal" CssClass="FilterNumber" runat="server" />

$(".FilterNumber").live("keypress", function (e) {    
    var caretPosition = doGetCaretPosition(this);
    var code = (code ? code : e.which);
    //if it is delete,navigation keys always allow 
    if (code == 0 || code == 8)
        return true;
    var Value = $(this).val();
    if (Value.indexOf('.') != -1) {
        var splt = Value.split('.');
        var indexofDot = Value.indexOf('.');
        if (caretPosition > indexofDot) {
        //allow only three character after .
            if (splt[1].length > 2) {
                return false;
            }
        }
        else {
            //allow only fifteen character before .
            if (splt[0].length > 14) {
                return false;
            }
        }
    }
    if (code != 46 && code > 31 && (code < 48 || code > 57))
        return false;
    //if it is (.)
    else if (code == 46) {
        var Value = $(this).val();
        //if value already contains (.) character
        if (Value.indexOf('.') != -1) {
            var splt = Value.split('.');
            //if there is already(.) char then return false
            if (splt.length >= 2)
                return false;
        }
    }
    return true;
});

与试图捕获所有的排列作为输入相比,允许所有输入并在提交时验证它要容易得多(而且非常常见)。这将变得更容易,并且比上面的事件代码可读性更强。与其尝试在输入时捕获所有排列,不如允许所有输入,然后在提交时验证它,这将更容易(而且非常常见)。这将变得更容易,并且比上面的事件代码可读性更强。您为此使用的jquery插件是什么?@demouser我刚刚使用了jquery解决方案,你测试过这个解决方案吗?你能给我你测试过的jquery链接JsFiddle吗?你用于这个解决方案的jquery插件是什么?@demouser我刚刚使用了jquery,你测试过这个解决方案吗?你能给我你测试过的jquery链接JsFiddle吗
function doGetCaretPosition(oField) {
    // Initialize
    var iCaretPos = 0;
    // IE Support
    if (document.selection) {
        // Set focus on the element
        oField.focus();
        // To get cursor position, get empty selection range
        var oSel = document.selection.createRange();
        // Move selection start to 0 position
        oSel.moveStart('character', -oField.value.length);
        // The caret position is selection length
        iCaretPos = oSel.text.length;
    }
    // Firefox support
    else if (oField.selectionStart || oField.selectionStart == '0')
        iCaretPos = oField.selectionStart;
    // Return results
    return (iCaretPos);
}