在中禁用零作为第一个字母

下面的代码禁用0作为#foo的第一个字符。
但是,您可以通过键入123来绕过此,然后拖动以选择123并放置0 。 (或输入ctrl+a

有办法阻止这种情况吗?

  $('input#foo').keypress(function(e){ if (this.value.length == 0 && e.which == 48 ){ return false; } }); 
   

我会处理输入,属性更改和粘贴事件。 然后使用正则表达式匹配任何以0开头的内容,并将当前值替换为减去前导0的值。

http://jsfiddle.net/SeanWessell/5qxwpv6h/

 $('input ').on('input propertychange paste', function (e) { var val = $(this).val() var reg = /^0/gi; if (val.match(reg)) { $(this).val(val.replace(reg, '')); } }); 

凯文报告的错误修复/根据佳能的推荐更新:

http://jsfiddle.net/SeanWessell/5qxwpv6h/2/

 $('input').on('input propertychange paste', function (e) { var reg = /^0+/gi; if (this.value.match(reg)) { this.value = this.value.replace(reg, ''); } }); 

这可能有效:

 $('input#foo').keyup(function(e) { if((this.value+'').match(/^0/)) { this.value = (this.value+'').replace(/^0+/g, ''); } }); 

使用此解决方案唯一可以打扰的是零显示一秒然后删除,因为我们使用的是keyup事件。

快速演示

我认为你正在寻找keydown jQuery事件而不是keypress事件。 这里有一些关于两者之间差异的移动信息。 尝试正则表达式摆脱前导零:

 $('input#foo').keydown(function(e){ this.value = this.value.replace(/^0+/, ''); }); 

这是固定版本:

  $('input#foo').keyup(function(e){ if(this.value.substring(0,1) == "0") { this.value = this.value.replace(/^0+/g, ''); } }); 

jsfiddle: http : //jsfiddle.net/ewmb1yq9/4/

仅接受不带前缀的数字值。 支持Ctrl + A

 var escapeKeys = [8, 46]; $('input#foo').keyup(function (e) { if ($.inArray(e.keyCode, escapeKeys) != 0) { if ((this.value + String.fromCharCode(e.keyCode)).match(/^[1-9][0-9]*$|^$/) != null) { this.lastValidValue = this.value + String.fromCharCode(e.keyCode); } else if (this.lastValidValue) { this.value = this.lastValidValue; } else { this.value = ""; } } else { this.lastValidValue = this.value; } }); 
   

如果要捕获输入值的更改(例如,通过拖动部分文本所做的更改),您可以观察input事件。

 $('input#foo').on("input", function(){ alert($(this).val()); }); 
   

你可以添加一个“提交”事件来validation它是否输入,无论它是如何进入的:

 $( "form" ).submit(function( event ) { if ( $( "input:first" ).val() != 0 ) { $( "span" ).text( "Validated..." ).show(); return; } $( "span" ).text( "Not valid!" ).show().fadeOut( 1000 ); event.preventDefault(); }); 
  

Type 'Anything but 0' to validate.