以下代码禁用0
作为#foo
中的第一个字符
但是,您可以通过键入123
来绕过此操作,然后拖动以选择123
并放置0
。 (或ctrl+a
输入)
有没有办法阻止这种情况?
$('input#foo').keypress(function(e){
if (this.value.length == 0 && e.which == 48 ){
return false;
}
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="foo" />
&#13;
答案 0 :(得分:9)
我会处理输入,属性更改和粘贴事件。然后使用正则表达式匹配任何以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, ''));
}
});
Kevin报告错误修复/根据佳能推荐更新:
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, '');
}
});
答案 1 :(得分:2)
这可行:
:set nolist
使用此解决方案唯一困扰您的是零显示一秒然后删除,因为我们正在使用$('input#foo').keyup(function(e) {
if((this.value+'').match(/^0/)) {
this.value = (this.value+'').replace(/^0+/g, '');
}
});
事件。
答案 2 :(得分:1)
我认为你正在寻找keydown
jQuery事件而不是keypress
事件。 Here's有些人会提供有关两者之间差异的信息。尝试正则表达式摆脱前导零:
$('input#foo').keydown(function(e){
this.value = this.value.replace(/^0+/, '');
});
答案 3 :(得分:1)
这是固定版本:
<input id="foo" />
$('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/
答案 4 :(得分:1)
仅接受不带前缀的数字值。支持 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;
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="foo" />
&#13;
答案 5 :(得分:0)
如果要捕获输入值的更改(例如,通过拖动部分文本所做的更改),您可以观看input
事件。
$('input#foo').on("input", function(){
alert($(this).val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="foo" />
答案 6 :(得分:0)
你可以添加一个“提交”事件来验证它是否已输入,无论它是如何进入的:
$( "form" ).submit(function( event ) {
if ( $( "input:first" ).val() != 0 ) {
$( "span" ).text( "Validated..." ).show();
return;
}
$( "span" ).text( "Not valid!" ).show().fadeOut( 1000 );
event.preventDefault();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<p>Type 'Anything but 0' to validate.</p>
<form action="javascript:alert( 'success!' );">
<div>
<input type="text">
<input type="submit">
</div>
</form>
<span></span>
jQuery的工作示例是最后一页(https://api.jquery.com/submit/)
注意:最重要的部分是添加“event.preventDefault()”操作,因为这会使表单不会意外提交。