2015-02-21 6 views
0

Мое заявление if else проверяет только первое? Кто-нибудь знает, почему он не проверяет остальные условия? -Он пропускает остальные. Я создал 3 переменные, чтобы упростить запись условий. Ниже приведены HTML и JQUERYJQuery if else statement skips

<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(); 

} 
+0

Вы можете разместить свой HTML ? – void

+0

И что вы имеете в виду, что 'if' всегда выполняется, не имеет значения, что это правда или ложь? – void

ответ

0

Трудно точно рассказать, какой вопрос вы задаете, но в том, как вы работаете, если есть какие-то другие тесты, есть несколько ошибок, поэтому я объясню их и, возможно, объясню, что не работает для вас.

Во-первых, emptyTextBoxes - объект jQuery, и объект всегда правдивый. Это означает, что ваше последнее условие никогда не будет выполнено, потому что !emptyTextBoxes никогда не будет правдой.

Если вы хотите проверить, не является ли объект jQuery пустым (например, в нем нет элементов DOM), тогда вы вместо этого проверяете emptyTextBoxes.length.

Таким образом, фиксируя только ту часть вашего, если/иначе, вы бы это:

// 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(); 

} 

Помимо этого, вы можете иметь логическую ошибку, потому что вы не были охвачены все возможные условия и некоторые условия будут не соответствуют ни одному из ваших условий, и не ясно, что ваши тесты дают вам необходимые условия. Я добавил комментарии к каждому условию, чтобы проиллюстрировать, какое условие он тестирует.

В частности, представляется, что последнее условие не может быть выполнено, так как если plate и bowl являются <input> поля, то это не возможно, чтобы иметь нулевой emptyTextBoxes, но bowl быть пустым, потому что если bowl был пуст, то emptyTextBoxes бы есть что-то в этом.


Если вы хотите сортировки требуется дополнительная помощь из логики их, если/иначе условие, то вам нужно будет объяснить слова, что вы хотите каждый 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/

+0

Я пытаюсь вставить hTML, но не повезло. – Vzupo

+0

У меня есть 2 меню на экране и несколько ящиков ввода. Я просто хочу проверить, нажата ли кнопка getAnswer, если все поля имеют вход &&, если все меню имеют выбор. В противном случае я хочу, чтобы он показывал предупреждение – Vzupo

+0

@Vtienne. Используйте ссылку «изменить», чтобы поместить HTML в свой вопрос, где вы можете его правильно отформатировать. Многострочный код не работает в комментариях. – jfriend00

-1

Попробуйте использовать if (!! your_variable). Потому что это проверяет, не является ли переменная неопределенной или пустой или пустой.