1

我正在尝试做的是一个用于输入邮政号码的简单表单字段,它允许输入最多 4 位数字。

看看我的jsfiddle。它工作正常,唯一的问题是,当里面有完整的 4 位数字并且选择了里面的文本时,我在输入数字时无法覆盖它,我必须先点击删除然后插入数字

http://jsfiddle.net/vCceN/2/

另一个无关紧要的问题,如何防止用户输入 0(零)作为第一个数字?


我使用了 kundan 的解决方案并(在我看来)添加了一个更好的解决方案来解决零问题:

$(document).ready(function(){
    var IsSelect = false;
    $('#fld_1').select(function(){
        IsSelect = true;
    }).keypress(function (event){

        if( event.which==8 || event.which==0 || event.which == 27) return true;
        if($(this).val().length > 3 && !IsSelect) return false;
        if(IsSelect && event.which == 48) return false;
        if($(this).val().length == 0 && event.which == 48) return false;

        var regex = new RegExp("^[0-9]");

        var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
        if (!regex.test(key)) {
            event.preventDefault();
            return false;
        }
        IsSelect = false;
    });

});

工作演示

它几乎完美地工作......唯一的问题是当用户在输入框中部分选择文本(例如最后两位数字......而不是他不能从零开始写,但它应该是可能的,因为他正在插入第三个字母而不是开头

4

1 回答 1

3

它会解决你的两个问题

$(document).ready(function(){
  var IsSelect = false;
  $('#fld_1').select(function(){
     IsSelect = true;
  });
  $('#fld_1').keypress(function (event){

    if( event.which==8 || event.which==0 || event.which == 27) return true;
    if($(this).val().length > 3 && !IsSelect) return false;

    var regex = new RegExp("^[0-9]");

    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
        event.preventDefault();
        return false;
    }
    IsSelect = false;
  });

  $('#fld_1').keyup(function (event){
    $(this).val(this.value.replace(/\b0+/g, ""));     
  });
});

工作演示

于 2012-08-10T17:36:14.693 回答