阻止用户在输入文本元素中输入负值的最佳方法是什么?
目前我正在检查模糊的字段值,但我希望有人有更好的解决方案。
$(".payment").blur(function() {
var payment = getAmount($(this).val());
if(!isNaN(payment) && amount >= 0) {
$(this)
.css("color", "black")
.val(currency(payment));
} else {
if(amount < 0) showMessage("Negative amounts are not allowed", "error");
$(this).css("color", "red");
}
});
function getAmount(strAmount) {
var amount = new String(strAmount).replace(/\$/g, "").replace(/,/g, "");
return parseFloat(amount);
}
答案 0 :(得分:9)
您可以使用jQuery的.keypress()
并阻止 - 键的默认操作。
示例:http://jsfiddle.net/5cgXg/
$("#target").keypress(function(event) {
if ( event.which == 45 || event.which == 189 ) {
event.preventDefault();
}
});
答案 1 :(得分:2)
这应该是诀窍:
$(".payment").keydown(function(event) {
if (event.keyCode == 45 ) { event.preventDefault(); }
});
这将防止在检测到“ - ”(45)的字符代码时注册keydown事件。
答案 2 :(得分:2)
假设您可能不想使用键码(e.which
,e.keyCode
等),这里还有一个选项:
$('#a').blur(
function(){
var v = $(this).val(),
t = parseInt(v,10),
b = isNaN(t);
if (b){
$(this).val('');
}
else {
$(this).val(Math.abs(t));
}
});
参考文献:
答案 3 :(得分:1)
您可以使用jQuery的keypress或keydown事件来测试每个密钥的输入。
如果您还有其他需要验证的字段,请考虑使用jQuery Validation插件。
答案 4 :(得分:0)
感谢所有答案。
以下是我最终的结果:
$("input.payment").keypress(function(e) {
validateNumeric(e);
});
function validateNumeric(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var regex = /[0-9]|\./;
if( !regex.test(key) ) {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
}
}