这是一个文本字段过滤数值的正确方法?(Which is the proper way of filt

2019-06-25 03:03发布

我工作的一个文本框与实物验证,不会让你进入其他比数值工作。 由于这样,我最初的代码看起来很简单,与此类似:

$(textField).onKeyPress(function(e) {
    if (e.which < 48 && e.which > 57)
        e.preventDefault();
});

这是相当strightforward,但原来这(在所有浏览器的最新版本),Firefox将会使这也防止移动使用箭头键和删除/退格键,而其他浏览器不会。

环顾四周,我发现我还需要检查这些键,并为您在暴露的不同属性e事件引用。

我的最终代码看起来是这样的:

$(textField).onKeyPress(function(e) {
    var code = e.which || e.keyCode;
    if (code > 31  // is not a control key
        && (code < 37 || code > 40) // is not an arrow key
        && (code < 48 || code > 57) // is not numeric
        && (code != 46) // is not the delete key
    )
        e.preventDefault();
});

然而,这种感觉是太多解决一个相当简单的问题,只是防止非数字。

我究竟做错了什么? 这是在这种验证方面的最佳做法?

Answer 1:

我们将到两个按键响应,模糊事件。 当有人按一个键,我们检查,看看是否进入了关键的是一个数字。 如果是,我们允许它。 否则,我们阻止它。

如果该字段是模糊的,我们删除任何非数值,以及所有那些跟随值。 这将阻止用户在非数字字符串粘贴:

$("#textfield").on("keypress blur", function(e){
    if ( e.type === "keypress" )
        return !!String.fromCharCode(e.which).match(/^\d$/);
    this.value = this.value.replace(/[^\d].+/, "");
});

演示: http://jsfiddle.net/jonathansampson/S7VhV/5/



Answer 2:

工作演示 http://jsfiddle.net/Pb2eR/23/ 更新复制/粘贴演示: http://jsfiddle.net/Pb2eR/47/ (在此演示机智你复制粘贴字符串,字符它不会允许否则将使数以复制粘贴:在Safari浏览器进行测试)

演示的箭头键工作 http://jsfiddle.net/gpAUf/

这将帮助你。

注意:即使你复制粘贴,将其设置为空的输入框,在野生动物园的狮子OSX测试这个版本:)

很好的链接:[1] 如何只允许数字(0-9)在HTML输入框使用jQuery?

$(".hulk").keyup(function(){    
    this.value = this.value.replace(/[^0-9\.]/g,'');    
});
​

HTML

<input type="text" class="hulk" value="" />
​

更新复制粘贴的东西

$(".hulk").keyup(function(){

    this.value = this.value.replace(/[^0-9\.]/g,'');

});

$(".hulk").bind('input propertychange', function() {

     this.value = this.value.replace(/[^0-9\.]/g,'');
});​

从另一个演示代码

$(".hulk").bind('input propertychange', function(event) {
         if( !(event.keyCode == 8    // backspace
        || event.keyCode == 46      // delete
        || (event.keyCode >= 35 && event.keyCode <= 40)     // arrow keys/home/end
        || (event.keyCode >= 48 && event.keyCode <= 57)     // numbers on keyboard
        || (event.keyCode >= 96 && event.keyCode <= 105))   // number on keypad
        ) {
            event.preventDefault();     // Prevent character input
    }
     this.value = this.value.replace(/[^0-9\.]/g,'');
});

​


Answer 3:

这将使两家INT。 它还会删除文本,如果用户拷贝,并用鼠标粘贴。

$(document).ready(function () {
    $('#textfield').bind('keyup blur', function (e) {
        if (e.type == 'keyup') {
            if (parseInt($(this).val()) != $(this).val()) {
                $(this).val($(this).val().slice(0, $(this).val().length - 1));
            }
        } else if (e.type == 'blur') {
            $(this).val('');
        }
    });
});


文章来源: Which is the proper way of filtering numeric values for a text field?