2009-01-08 35 views

回答

6

Masked Input Plugin

jQuery(function($){ 
    $("#paymentAmount").mask("9999.99"); 
}); 
+0

它不会帮助,因为,蒙面输入创建了一个面具,它控制,以配合正则表达式 – 2009-01-08 19:24:41

+0

如果您的格式,但不是真的有用想要禁用将某些字符输入到文本框中的功能,那么掩码是您的最佳选择。你的规则有多复杂,你需要正则表达式吗? – Bob 2009-01-08 19:35:02

1

键盘事件有点棘手,因为jQuery开发文档建议。
http://unixpapa.com/js/key.html
http://yehudakatz.com/2007/07/03/event-normalization-in-jquery-113/

与您有关的困难是:

标识键
当你发现一个键盘事件,你可能想知道哪个键被按下。如果是这样,你可能会问太多。这是浏览器不兼容性和错误的一个非常大的混乱。
从上面

都是一样的,第一个链接jQuery中我应该这样做:

textBoxElement.keydown(function(e) { 
    var chr = String.fromCharCode(e.which); 
    if(!/[0-9.]/.test(chr)) { 
     e.preventDefault(); 
    } 
} 

这也将禁止进入一样,标签,删除等重要关键,所以需要被添加到条件。并非所有其他键都是可打印的,因此不能被正则表达,所以你必须检查他们的e.keyCode。 13,8等

如果你不是太困扰有关正则表达式,你可以做类似

textBoxElement.keydown(function(e) { 
    switch(e.keyCode) { 
     case 48: //0 
     case 49: //1 
     case 50: //2 
     case 51: //3 
     case 52: //4 
     case 53: //5 
     case 54: //6 
     case 55: //7 
     case 56: //8 
     case 57: //9 
     case 48: //10 
     case 37: //left 
     case 39: //right 
     case 8: //tab 
     case 13: //return 
     case 46: //del 
     case 190: //. 
      return; 
    } 
    e.preventDefault(); 
}); 
1

我不认为有现成的任何此类插件。这个问题有点棘手,因为你必须允许用户在应用你的正则表达式之前输入一些输入。也就是说,除非你的正则表达式只是定义了一组字符,否则你不能仅仅匹配每个字符。

举例说明,如果他们输入付款金额,并且您希望允许以单个字符为单位的数字和小数位,可以防止他们进入99.99.23.42492

另一方面,如果您提供了一个完整的正则表达式,如/\d+\.\d{2}/,那么它将不会匹配单个字符,您必须允许它们在尝试应用正则表达式之前键入一定数量的字符并且如果它们不匹配,则清除它们的输入。这可能令人沮丧。

如果您确实想在输入时对其进行过滤,那么您希望允许第一个字符输入数字,然后输入数字或小数点后续字符,直到输入小数点,然后再输入两位数字,然后没有更多的投入。这不是一个通用的过滤器。

例如,这里有一些代码可以做到这一点,但它非常难看。

myInput.keydown(function() { 
     var text = this.val 
     if(!/^\d/.test(text)) { 
      return ''; 
     } else { 
      done = text.match(/^(\d+\.\d\d)/); 
      if (done) { return done[0]; } 

      last_char = text.substr(text.length-1,1); 
      decimal_count = text.replace(/[^\.]/g,'').length; 

      if (decimal_count < 1) { 
      if (!/[\d\.]/.test(last_char)) { 
       return text.substr(0,text.length-1); 
      } 
      } else if (decimal_count == 1 && last_char == '.') { 
      return text; 
      } else { 
      if (!/[\d]/.test(last_char)) { 
       return text.substr(0,text.length-1); 
      } 
      } 
      return text; 
     } 
    }); 

当然,如果他们碰巧粘贴某些值而没有进行“真实”输入,这将不起作用。

也许一些其他的方法会更适合你吗?如突出显示该字段并向用户指示它们是否输入了非数字,非小数点,或者是否输入了一个以上的小数,而不是过滤输入本身,因为这看起来很混乱。

0

下面是一个简单的jQuery的扩展使用:

jQuery.fn.DecimalMask = function() { 
    return this.each(function() { 
    $(this).keypress(function (e) { 
     var keynum; 
     if (window.event) // IE 
     { 
     keynum = e.keyCode; 
     } 
     else if (e.which) // Netscape/Firefox/Opera 
     { 
     keynum = e.which; 
     } 
     if (typeof keynum == 'undefined') return true; 
     else if (keynum == 46 && $(this).val().indexOf(".") > -1) return false; //already has a decimal point 
     else return ((keynum > 47 && keynum < 58) || keynum == 13 || keynum == 8 || keynum == 9 || keynum == 46 || keynum == 45); //allow ony number keys or keypad number keys 
    }); 
    }); 
}; 
//implementation 
$("#mytxtbox").DecimalMask();