Chrome浏览器中的奇怪.replace()行为

Ris*_*shi 7 javascript jquery replace

<div>
    <input type="text" class="allownumericwithdecimal"/>saadad
</div>
Run Code Online (Sandbox Code Playgroud)
$(".allownumericwithdecimal").live("keypress keyup ", function (event) {
    $(this).val($(this).val().replace(/[^0-9\.]/g, ''));
    var text = $(this).val();
    if (!((event.which >= 48 && event.which <= 57) || event.which == 8 || event.which == 46 || event.which == 110 || event.which == 0)) {
        var text = $(this).val();
        if ((text.indexOf('.') != -1) && (text.substring(text.indexOf('.'), text.indexOf('.').length).length > 2)) {
            //event.preventDefault();
        }
    }
    var text = $(this).val();
    if ((event.which >= 48 && event.which <= 57) && (text.indexOf('.') != -1)) {
        if ((text.substring(text.indexOf('.'), text.indexOf('.').length).length) > 2) {
            //event.preventDefault();
        }
        if (event.which == 190) {
            //event.preventDefault();
        }
    }
    if (text.indexOf('.') != -1 && event.which == 190) {
        if (text.match("^[0-9]+(\.[0-9]{0,2})?$")) {} else {
            $(this).val('');
        }
    }
    if (text.indexOf('.') == -1 && text.length > 7 && (event.which != 190 && event.which != 8 && event.which != 46 && event.which != 110 && event.which != 0)) {
        event.preventDefault();
    }
});
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/Lx9h2smh/

问题是如果我在textBox中输入一个值3434并且现在我想通过将光标放在3之后并按下5来使其成为35434,它在Firefox和IE中工作正常但在chrome中,5在值之后添加并且它变为34345.

罪魁祸首是替换非数字字符的行.

如何处理这个问题?

Rad*_*ina 2

试试这个code,它运行了。jsFiddle

我只是做一个测试

if ( /[^0-9\.]/g.test($(this).val()) ) {
    $(this).val($(this).val().replace(/[^0-9\.]/g,'')); 
}
Run Code Online (Sandbox Code Playgroud)

解释

您只需确保用户输入您想要的值即可。如果输入的值不是integer. 你的正则表达式的意思是:“那些不是整数或点(.)的,用空值替换它们”。这就是为什么您需要进行此测试。因此,如果用户输入所需的值,它不会执行替换操作,也不会通过测试。