Jquery if else语句跳过

时间:2015-02-21 15:34:27

标签: jquery

我的if else语句只检查第一个? 任何人都知道为什么它不检查其余的条件? - 它会跳过剩下的。我设置了3个变量来简化条件。下面是HTML和JQUERY

<select id="tToth">
<option value="0">Select a state</option>
<option value="1">California</option>
<option value="2">Colorado</option>
</select>
<br>
<br>
<select id="tState">
<option value="0">Select a Zone</option>
<option value="1">west</option>
<option value="2">sout</option>
<option value="3">east</option>
</select>
<br>
<br>
<input type="text" id="boxa" size="6" required="required"></input>
<br>
<br>
<input type="text" id="boxb" size="6" required="required"></input>
<br>
<br>
<input type="text" id="boxb" size="6" required="required"></input>
<br>
<br>
<input type="button" id="answerButton" value="Get Answer"></input> 

var plate = $("#tToth").val();
var bowl = $("#tState").val();
var emptyTextBoxes = $('input:text').filter(function () {
return this.value === "";
});
var string = "The blank textbox ids are - \n";

emptyTextBoxes.each(function () {
    string += "\n" + this.id;
});

if (emptyTextBoxes && plate && bowl) {
    alert("empty boxes and plate & bowl");
    $(".error").show();
} else if (emptyTextBoxes && !plate && !bowl) {
    alert("empty boxes, plate and bowl");
    $(".error").show();


} else if (!emptyTextBoxes && plate && !bowl) {
    alert("nothing empty");
    $(".error").show();

}

2 个答案:

答案 0 :(得分:0)

很难确切地说出你要问的问题,但是如果你的if / else测试工作如何,有几个问题是错误的,所以我会解释这些,也许这解释了什么不适合你。 / p>

首先,emptyTextBoxes是一个jQuery对象,一个对象总是真实的。这意味着永远无法满足您的最后一个条件,因为!emptyTextBoxes永远不会成真。

如果您想测试jQuery对象是否为空(例如,其中没有DOM元素),那么请检查emptyTextBoxes.length

所以,只修复你的if / else部分,你就有了这个:

// if we have some emptyTextBoxes, but we do have values for plate and bowl
if (emptyTextBoxes.length && plate && bowl) {
    alert("empty boxes and plate & bowl");
    $(".error").show();
// if we have emptyTextBoxes, but no values for plate and bowl
} else if (emptyTextBoxes.length && !plate && !bowl) {
    alert("empty boxes, plate and bowl");
    $(".error").show();

// there are no empty text boxes, we have plate, but not bowl
} else if (!emptyTextBoxes.length && plate && !bowl) {
    alert("nothing empty");
    $(".error").show();

}

除此之外,您可能会遇到逻辑错误,因为您没有涵盖所有可能的条件,并且某些条件不符合您的任何条件,并且不清楚您的测试是否为您提供了所需的条件。我已经为每个条件添加了注释,以说明它正在测试的条件。

特别是,似乎永远不会满足最后一个条件,因为如果platebowl<input>字段,那么就不可能有emptyTextBoxes,但是bowl为空,因为如果bowl为空,那么emptyTextBoxes会有一些内容。


如果你想进一步帮助整理这些if / else条件的逻辑,那么你需要用文字解释你希望每个if条件匹配的内容,我们可以帮助你找到合适的逻辑。


根据您的进一步说明,这是一个代码版本,可在点击答案按钮时检查每种输入类型:

$("#answerButton").click(function(e) {
    var plate = $("#tToth").val();
    var bowl = $("#tState").val();
    var emptyTextBoxes = $('input:text').filter(function () {
        return this.value === "";
    });
    if (plate === "0") {
        alert("Please select a State");
    } else if (bowl === "0") {
        alert("Please select a Zone");
    } else if (emptyTextBoxes.length !== 0) {
        alert("All text fields must contain a value")
    } else {
        alert("All values good");
    }
});

工作演示:http://jsfiddle.net/jfriend00/zhex1z4k/

答案 1 :(得分:-1)

尝试使用if(!! your_variable)。因为那将检查变量是否未定义,或者为null还是空。