Firefox数字文本框验证代码无法正常工作

时间:2014-12-18 04:12:43

标签: javascript model-view-controller

我编写了以下代码来验证文本框,其中的数字只有小数点后的两位数,但它在firefox中不起作用 我们在十进制后输入两位数后会阻塞所有键。 例子:如果我输入123.45我无法执行任何其他事件,文本框就像被禁用一样。

使用Javascript:

function noAlphabets(event){

var charCode = (event.which) ? event.which : event.keyCode
if (charCode == 188) {
    return true;
}
//Compatible with IE8 & other browser
var obj = event.currentTarget ? event.currentTarget : event.srcElement;
var newvalue = $(obj).val();
alert(newvalue);// $(event.currentTarget).val();
//if (newvalue.indexOf(".") >= 0) {
//    if (newvalue.substr(newvalue.indexOf(".") + 1, (newvalue.length - 1)).length >= 2)
//    { return false; }
//}
if ((charCode != 46 && charCode > 31
        && (charCode < 48 || charCode > 57))
         || (charCode == 46 && $(obj).val().indexOf(".") != -1))
    return false;

return true;

}

MVC视图代码:

@ Html.TextBoxFor(model =&gt; model.FolioList [i] .Amount,(Model.FolioList [i] .IsFolioChecked)?(object)new {@onkeypress =“return noAlphabets(event);”}: (对象)new {disabled =“disabled”,@ onkeypress =“return noAlphabets(event);”})

1 个答案:

答案 0 :(得分:0)

我假设您正在寻找它以便您可以更改框的值(即使用退格键来擦除输入并能够输入新值)。考虑到这一点,这是我设计的解决方案。这将检查框中是否有句点,然后检查周期后子字符串的长度是否大于2.如果它大于2并且最近的按键的键码不是退格,则防止按键。第二个if语句检查密钥是否不是数字,退格或句点。如果它不是那些,那么阻止按键。

$("#validate").keydown(function(e){
    var pressedKey = (e.which || e.keycode);
    if (e.target.value.indexOf('.') > -1 && e.target.value.substr(e.target.value.indexOf('.')).length > 2 && pressedKey != 8) {
        e.preventDefault();
    }
    if (((pressedKey < 48 || pressedKey > 57) && (pressedKey < 96 || pressedKey > 105)) && pressedKey != 8 && pressedKey != 190) {
        e.preventDefault();
    }
});

http://jsfiddle.net/IronFlare/7xpLhhxa/1/