Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不允许使用负值_Javascript_Jquery - Fatal编程技术网

Javascript 不允许使用负值

Javascript 不允许使用负值,javascript,jquery,Javascript,Jquery,防止用户在输入文本元素中输入负值的最佳方法是什么 目前我正在检查模糊上的字段值,但我希望有人有更好的解决方案 $(".payment").blur(function() { var payment = getAmount($(this).val()); if(!isNaN(payment) && amount >= 0) { $(this) .css("color", "black") .val

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

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

$(".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);
}
$(“.payment”).blur(函数(){
var payment=getAmount($(this).val());
如果(!isNaN(付款)&金额>=0){
$(本)
.css(“颜色”、“黑色”)
.val(货币(付款));
}否则{
如果(金额<0)显示消息(“不允许负金额”,“错误”);
$(this.css(“颜色”、“红色”);
}
});
函数getAmount(strAmount){
var amount=新字符串(strAmount)。替换(/\$/g,“”)。替换(/,/g,“”);
返回浮动(金额);
}

您可以使用jQuery的
.keypress()
并防止对-key执行默认操作。 例如:


这应该起到作用:

$(".payment").keydown(function(event) {
    if (event.keyCode == 45 ) { event.preventDefault(); }   
});
这将防止在检测到“-”(45)的字符代码时注册keydown事件。

您可以使用jQuery或事件对每个键上的输入进行测试


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

< P>谢谢所有的答案。

以下是我的结论:

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

假设您可能不想使用键代码(
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));
        }
    });​

参考资料:


  • getAmount
函数的作用是什么?而
金额
变量来自哪里?如果(!isNaN(payment)&&payment>=0)
正在处理模糊,您的真正问题是应该在什么时候验证字段,这取决于具体情况。您可以在加密、更改、模糊或表单提交时进行验证。每种方法都有各自的优点和缺点。我真的不知道这是否是最好的方法,但您可以使用
keyup事件
获取值,然后检查它是否正确。您需要听击键。请看:这更多的是一个可用性问题,作为一个用户,我更希望在我完成它时(即在模糊上)让它验证,而不是在编辑时。如果我的胖手指
-
在我有机会删除它之前,我不想让它打断我。你在哪里想出45?我按破折号键时得到109分。除此之外,想法是一样的。好的解决方案。我也会在提交时进行验证,以防他们复制粘贴。@David根据这里它是189:根据这里它是45:我觉得这个键可能有多个值……好吧,我能想到的唯一值是109。我按下+/=旁边的破折号,以及我的numpad破折号,无论是否启用Num Lock,它都保持不变。当然,这只是一个有一个美国键盘的家伙。@David我做了同样的事情,在jQuery网站上,它给出了45个,另外189个。我认为需要做一些测试,或者四处看看以确保所有关键值都被考虑在内,
$('#a').blur(
    function(){
        var v = $(this).val(),
            t = parseInt(v,10),
            b = isNaN(t);
        if (b){
            $(this).val('');
        }
        else {
            $(this).val(Math.abs(t));
        }
    });​