2

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

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

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

5 回答 5

9

您可以使用 jQuery.keypress()并阻止 - 键的默认操作。示例:http: //jsfiddle.net/5cgXg/


$("#target").keypress(function(event) {
  if ( event.which == 45 || event.which == 189 ) {
      event.preventDefault();
   }
});
于 2012-06-04T18:38:03.673 回答
2

这应该可以解决问题:

$(".payment").keydown(function(event) {
    if (event.keyCode == 45 ) { event.preventDefault(); }   
});

当检测到“-”(45)的字符代码时,这将防止 keydown 事件注册。

于 2012-06-04T18:38:24.043 回答
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 小提琴演示

参考:

于 2012-06-04T18:49:47.013 回答
1

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

如果您还有其他需要验证的字段,请考虑使用 jQuery验证插件。

于 2012-06-04T18:39:30.587 回答
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();
   }
}
于 2012-06-04T18:43:58.690 回答