JavaScript错误捕获未读取0(零)

JavaScript错误捕获未读取0(零),javascript,error-handling,Javascript,Error Handling,下面的JavaScript只检查字段中是否有4位数字,如果没有,则发出警告 但出于某种原因,如果我输入四个零(0000),它会将其作为一个空字段并抛出警告 你知道怎么解决这个问题吗。。。??我不是程序员,但经过数周的反复试验,我已经把这些代码组合在一起了 function validate(){ // if ( (!isNaN($("#couponstart1").val())) || (!isNaN($("#couponstart2").val())) || (!isNaN($("#coup

下面的JavaScript只检查字段中是否有4位数字,如果没有,则发出警告

但出于某种原因,如果我输入四个零(0000),它会将其作为一个空字段并抛出警告

你知道怎么解决这个问题吗。。。??我不是程序员,但经过数周的反复试验,我已经把这些代码组合在一起了

function validate(){
//  if ( (!isNaN($("#couponstart1").val())) || (!isNaN($("#couponstart2").val())) || (!isNaN($("#couponend1").val()))  || (!isNaN($("#couponend2").val()))  ) {
    var all_ok = true;
    var err_msg = "";
    var fld = "";

    if ( $("#couponstart1").val() == '' || $("#couponstart2").val() == '' || $("#couponend1").val() == '' || $("#couponend2").val() == '' ) {
        all_ok = false;
        err_msg += "\n - Card Numbers cannot be blank";
        fld='couponstart1';
    }else{
        if ( isNaN($("#couponstart1").val()) || isNaN($("#couponstart2").val()) || isNaN($("#couponend1").val()) || isNaN($("#couponend2").val()) ) {
            all_ok = false;
            err_msg += "\n - Card Number has to be numeric";
            fld='couponstart1';
        }else{
            if ( $("#couponstart1").val() < 1 || $("#couponstart2").val() < 1 || $("#couponend1").val() < 1 || $("#couponend2").val() < 1 ) {
                all_ok = false;
                err_msg += "\n - Card Numbers are not correct";
                fld='couponstart1';
            }else if ($("#couponstart1").val().length != 4 || $("#couponstart2").val().length != 4 || $("#couponend1").val().length != 4 || $("#couponend2").val().length < 4){
                all_ok = false;
                err_msg += "\n - Card Numbers are not correct";
                fld='couponstart1';
            }   
        }
    }

    if (all_ok == false){
        alert("The following errors have taken place" + err_msg); 
        setFocus(fld);
    }
    return all_ok;    

}
函数验证(){
//if((!isNaN($(“#耦合开始1”).val())|(!isNaN($(“#耦合开始2”).val())|(!isNaN($(“#耦合开始1”).val())|(!isNaN($(“#耦合开始2”).val()))|(!isNaN($($(“#耦合开始2”).val()){
var all_ok=真;
var err_msg=“”;
var fld=“”;
如果($(“#耦合开始1”).val()=''|$(“#耦合开始2”).val()=''|$(“#耦合开始1”).val()=''|$(“#耦合开始2”).val()=''(“#耦合开始2”).val()=''){
all_ok=false;
err_msg+=“\n-卡号不能为空”;
fld='couponstart1';
}否则{
if(isNaN($(“#耦合开始1”).val())| isNaN($(“#耦合开始2”).val())| isNaN($(“#耦合开始1”).val())| isNaN($(“#耦合开始2”).val()){
all_ok=false;
err_msg+=“\n-卡号必须是数字”;
fld='couponstart1';
}否则{
if($(“#耦合开始1”).val()<1 |$(“#耦合开始2”).val()<1 |$(“#耦合开始1”).val()<1 |$(“#耦合开始2”).val()<1 | |{
all_ok=false;
err_msg+=“\n-卡号不正确”;
fld='couponstart1';
}如果($(“#耦合开始1”).val().length!=4 |$(“#耦合开始2”).val().length!=4 |$(“#耦合开始1”).val().length!=4 |$(“#耦合开始2”).val().length<4){
all_ok=false;
err_msg+=“\n-卡号不正确”;
fld='couponstart1';
}   
}
}
如果(全部正常==错误){
警报(“发生了以下错误”+错误消息);
setFocus(fld);
}
返回所有_ok;
}

假设四位数字对应于
$(“#耦合开始1”).val(),$(“#耦合开始2”).val(),$(“#耦合开始1”).val(),$(“#耦合开始2”).val()
那么问题在于JavaScript中有两种类型的比较运算符

在第一个
if
语句中,您选择计算
if$(“#coupontstart1”).val()=''||…)
。在这种情况下,您使用的是一个相等运算符,如果操作数不是相同的类型,它将对操作数进行转换。因此,使用此运算符
0=''
返回
true
。相反,您可以按以下方式使用严格相等运算符
==

 if ( $("#couponstart1").val() === '' || ...)
在这种情况下,
0==''
将返回false。这很可能在第一条if语句中对您有所帮助,因为输入
0000
将使所有条件都为false,您将继续执行else块


希望这能有所帮助!

令人遗憾的是,计算机做的是我们要求的,而不是我们想要的


如果您的输入用0000填充,并且您比较
在您的代码中,4个零到底在哪里抛出错误?并且您可以使用正则表达式节省大量测试,例如
/\d{4}/.test(“0000”)
将只测试4位数字,我不知道如何使用正则表达式。这就是抛出错误的地方:
}否则{if($(“#耦合开始1”).val()<1 |$(“#耦合开始2”).val()<1 |$(“#耦合开始1”).val()<1 |$(“#耦合开始2”).val()<1{all_ok=false;err#u msg+=“\n-卡号不正确”是的,这是有意义的。仅供参考,这就是抛出错误的地方:
}否则{if($(“#couponstart1”).val(<1 | |(“#couponstart2”).val(<1 | |(“#couponned1”).val(<1 | couponned2”).val(<1){all | ok=false;err“\n-卡号不正确”fld='couponstart1';
对不起,您的问题的措辞让我感到困惑,因为您说错误是使用零使您的程序抱怨它是空的。如果您的所有值都是0,那么
.val()的条件不是<1
始终为真?如果值为0,那么它如何通过第一个
if
语句,除非值是字符串“0”?我不知道你的第二个问题,Josh。但你对第一个问题的回答是正确的。也许我应该提供实际网页的屏幕截图。有4个字段,每个字段必须有4个字段其中包含数字(最后一个可以包含4或5个数字)。数字可以是零。除非我尝试将所有零放在任何字段中,否则此设置会起作用。我不是程序员,但我认为当我将所有零放在一起时,该字段的值现在小于1。因此会出现错误。如果我将0001放在一起,则不会出现错误。因此,如果我将
.val()<1
更改为
.val()<-1
那么就没有错误了。aldux,thanx用于响应和真正优雅的解决方案。它可以工作。问题:由于我在该页面上还有一些其他JavaScript代码,您认为我所做的更改是否足够,而无需任何其他代码更改??(我不是程序员。)我刚把
.val()<1
改成
.val()<-1
。没有更多的错误。或者你认为这会破坏其他东西吗…?与-1比较仍然是无用的,因为你的数字必须有4个数字。明白。但是如果我将其更改为-1,则该特定错误将消失,如果有人输入的数字少于4个,它将正确捕获。这两个条件都满足。当然,您的解决方案更加优雅,但在这种情况下,更改为-1似乎也可以。我不知道为什么它可以工作,但它似乎可以工作。如果其中任何一个看起来很奇怪,请告诉我。谢谢您的时间。一点也不奇怪。因为0确实小于-1。它应该与

<!-- html -->
<form>
    <p>
        <label for="couponstart1">Coupon Start Part 1</label>
        <input type="text" maxlength="4" id="couponstart1" class="validateme" />
    </p>
    <p>
        <label for="couponstart2">Coupon Start Part 2</label>
        <input type="text" maxlength="4" id="couponstart2" class="validateme" />
    </p>    
     <p>
        <label for="couponend1">Coupon End Part 1</label>
        <input type="text" maxlength="4" id="couponend1" class="validateme" />
    </p>
    <p>
        <label for="couponstart2">Coupon Start End 2</label>
        <input type="text" maxlength="4" id="couponend2" class="validateme" />
    </p>
    <button type="button" id="testit">Test</button>
</form>
/* javascript/jQuery */
$(document).ready(function(){
    $("#testit").click(function(){
        var rgx = /\d{4}/;
        var allgood = true;
        $("input.validateme").each(function(){
            if( ! rgx.test( $(this).val() ) ){
                alert("Card number for " + ($('label[for="' + $(this).attr("id")  + '"]').text()) + " is not correct!\nPlease use 4 digits all numbers!");

                $(this).select();
                allgood = false;
                return false;
            }
        });
        if(allgood) alert("All good!");
    });
});