不允许使用负值

时间:2012-06-04 18:30:55

标签: javascript jquery

阻止用户在输入文本元素中输入负值的最佳方法是什么?

目前我正在检查模糊的字段值,但我希望有人有更好的解决方案。

$(".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);
}

5 个答案:

答案 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.whiche.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));
        }
    });​

JS Fiddle demo

参考文献:

答案 3 :(得分:1)

您可以使用jQuery的keypresskeydown事件来测试每个密钥的输入。

如果您还有其他需要验证的字段,请考虑使用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();
   }
}