2017-10-31 12 views
0

入力をしようとしていますが、値は99.999です。 MaxLengthを使用したくないのは、小数点の桁数を計算しないためです。特定のregexと一致しないときに消去する他の機能は使用したくありません。私はそれが入力でそれを停止したい。小数点以下の最大値99.999 HTMLブロック入力

function IsCurrencyNoMinus1 (e, thisobj, min, max) { 
var keyCode = e.keyCode == 0 ? e.charCode : e.keyCode; 
var ret = ((keyCode >= 48 && keyCode <= 57) || (keyCode == 44) || (keyCode == 46) || (specialKeys.indexOf(e.keyCode) != -1 && e.charCode != e.keyCode)) 

var inStr = $(thisobj).val(); 
if (ret && (keyCode == 45) && ((thisobj.selectionStart != 0) || (inStr.indexOf('-') != -1))) 
    ret = false; 

if (ret && (keyCode == 46) && (inStr != '' && inStr.indexOf('.') != -1) && !(Math.abs(thisobj.selectionStart - thisobj.selectionEnd) == inStr.length)) { 
    ret = false; 
} 

var dotPos = (inStr.indexOf('.') != -1) ? inStr.indexOf('.') : inStr.length; 
inStr = inStr.replace(/\,/g, ''); 
var parts = inStr.split('.'); 
var maxParts = max.toString().split('.'); 

if (ret && (inStr != '' && (keyCode >= 48 && keyCode <= 57))) { 
    if ((parts[0].length >= maxParts[0].length) && ((thisobj.selectionStart - thisobj.selectionEnd) == 0) 
    && (thisobj.selectionStart <= dotPos)) { 
    ret = false; 
    } 

    if (ret && (parts[1] != undefined && parts[1].length >= 2) && ((thisobj.selectionStart - thisobj.selectionEnd) == 0) 
    && (thisobj.selectionStart > dotPos) && (thisobj.selectionStart <= dotPos + 3)) 
    ret = false; 

    var firstPos = thisobj.selectionStart < thisobj.selectionEnd ? thisobj.selectionStart : thisobj.selectionEnd; 
    if (ret && (parts[0].length >= maxParts[0].length) && (parts[1] != undefined && parts[1].length >= 1) 
    && ((dotPos - firstPos == 0 && Math.abs(thisobj.selectionStart - thisobj.selectionEnd) < 4) 
    || (dotPos - firstPos == 1 && (Math.abs(thisobj.selectionStart - thisobj.selectionEnd) >= 2 && Math.abs(thisobj.selectionStart - thisobj.selectionEnd) < 4)))) 
    ret = false; 
} 

if (Number(inStr) > max) { 
    thisobj.value = ''; 
    ret = true; 
} 

if (Number(inStr) < min) { 
    thisobj.value = ''; 
    ret = true; 
} 

// var re = new RegExp(/^\(?-?[0-9]{0,12}(\.[0-9]{0,2})?\)?$/) 
// if (!re.test(inStr)) { 
// thisobj.value = "" 
// } 

return ret 
} 
+0

何を試しましたか? :/ –

+0

@ Jonasw私は制限するために使用しているコードは、グローバルライブラリで、あまりにも長く複雑です。

+0

クール。そして、それで動作しないものは何ですか? –

答えて

0

解決策が見つかりました!誰かが必要とする場合は、以下のコードを確認してください。

function Format3DigitDecimal(e, thisobj, min, max) 
{ 
    var keyCode = e.keyCode == 0 ? e.charCode : e.keyCode 
    var ret = ((keyCode >= 48 && keyCode <= 57) || (keyCode == 44) || (specialKeys.indexOf(e.keyCode) != -1 && e.charCode != e.keyCode)) 

    var inStr = $(thisobj).val() 

    inStr = inStr.replace(/\,/g, '') 

    if (ret && (inStr != '' && (keyCode >= 48 && keyCode <= 57))) 
    { 
     if ((inStr.length >= max.toString().length) && ((thisobj.selectionStart - thisobj.selectionEnd) == 0)) 
     { 
      ret = false 
     } 
    } 

    if (ret && (inStr != '' && (keyCode >= 48 && keyCode <= 57))) 
    { 
     if ((inStr.length == 2) && ((thisobj.selectionStart - thisobj.selectionEnd) == 0)) 
     { 
      ret = false 
     } 
    } 

    return ret 
} 
関連する問題