2015-07-04 2 views
1

Не могли бы вы взглянуть на This Demo и сообщить мне, почему эта ошибка происходит во время проверки двух типов входных параметров?Ошибка при использовании булева с простой проверкой

Технически, что происходит, если пользователь не выбирает ни один из флажков и не выбирает параметры и не нажимает кнопку отправки, появляется сообщение об ошибке, а validRequest boolean остается в false. Теперь, если пользователь только выбрать флажки ситуации является равно validRequest булевым является false и сообщение об ошибке появляется НО если пользователь забудет выбрать флажки и только выбирает из списка validateQuery() проверяет validRequest в True и то теперь сообщении об ошибке и появляется предупреждающее сообщение!

Не могли бы вы сообщить мне, почему это происходит?

$(function() { 
 
    var validRequest = false; 
 

 
    function validateQuery() { 
 

 
     var selectedDoll = $('input:checkbox[name=doll]'); 
 
     if ($(selectedDoll).is(':checked')) { 
 
      validRequest = true; 
 
      $('#err').html(''); 
 
     } else { 
 
      validRequest = false; 
 
      $('#err').html('Some Thing Wrong!'); 
 
     } 
 

 
     var selectedIcecream = $("#icecream").val(); 
 
     if (selectedIcecream == 0) { 
 
      validRequest = false; 
 
      $('#err').html('Some Thing Wrong!'); 
 
     } else { 
 
      validRequest = true; 
 
      $('#err').html(''); 
 
     } 
 
    } 
 

 
    $("#isValid").on("click", function() { 
 
     validateQuery(); 
 
     if(validRequest){ alert('Ready To Go');} 
 
      console.log(validRequest); 
 
    }); 
 

 
});
#err{color:red;}
<div> 
 
    <input type="checkbox" name="doll" value="cat" />Cats 
 
    <br /> 
 
    <input type="checkbox" name="doll" value="dog" />Dogs 
 
    <br /> 
 
    <input type="checkbox" name="doll" value="bird" />Birds 
 
    <br /> 
 
    <br /> 
 
    <select id="icecream"> 
 
     <option value="0">Select From List</option> 
 
     <option value="chocolate">Chocolate</option> 
 
     <option value="vanilla">Vanilla</option> 
 
     <option value="strawberry">Strawberry</option> 
 
     <option value="caramel">Caramel</option> 
 
    </select> 
 
</div> 
 
<p> 
 
    <input type="submit" id="isValid" value="Submit now" /> 
 
</p> 
 
<p> 
 
    <div id="err"></div> 
 
</p>

+1

у вас есть два независимых условия и единый флаг, но хотят проверки только если оба истинны. Вам нужно либо реструктурировать все, чтобы быть вложенным (или составным) состоянием, либо иметь два отдельных флага, а затем проверить истинность обоих. Вы можете сделать это с помощью двух отдельных переменных, массива (а затем подсчета длины) или приращения 'validRequest' и проверьте, что это> = 0. Просто зависит от того, как вы хотите показать ошибки –

ответ

2

Исправлено: http://jsfiddle.net/byk309j8/7/

Проблема заключалась в том, что у вас было 2 независимыми, если заявления в то время как вы должны быть только один. Также вы проверяли, если выбрать поле будет пустым == 0 вместо не пустой !== 0

$(function() { 
var validRequest = false; 

function validateQuery() { 

    var selectedDoll = $('input:checkbox[name=doll]'); 
    var selectedIcecream = $("#icecream").val(); 

    // checkbox is not checked, but select is 
    if ($(selectedDoll).is(':checked') && selectedIcecream == 0) { 
     validRequest = false; 
     $('#err').html('select not selected'); 
    } else if ($(selectedDoll).is(':checked') == false && selectedIcecream != 0) { 
     validRequest = false; 
     $('#err').html('checkbox not checked'); 
    } else if ($(selectedDoll).is(':checked') == false || selectedIcecream == 0) { 
     validRequest = false; 
     $('#err').html('checkbox not checked or select not selected'); 
    } else { 
      validRequest = true; 
     $('#err').html(''); 
    } 
} 

$("#isValid").on("click", function() { 
    validateQuery(); 
    if(validRequest){ alert('Ready To Go');} 
     console.log(validRequest); 
}); 
}); 

<div> 
<input type="checkbox" name="doll" value="cat" />Cats 
<br /> 
<input type="checkbox" name="doll" value="dog" />Dogs 
<br /> 
<input type="checkbox" name="doll" value="bird" />Birds 
<br /> 
<br /> 
<select id="icecream"> 
    <option value="0">Select From List</option> 
    <option value="chocolate">Chocolate</option> 
    <option value="vanilla">Vanilla</option> 
    <option value="strawberry">Strawberry</option> 
    <option value="caramel">Caramel</option> 
</select> 
    </div> 
    <p> 
    <input type="submit" id="isValid" value="Submit now" /> 
    </p> 
     <p> 
<div id="err"></div> 
    </p> 

#err{color:red;} 
+0

Спасибо Станимир, сейчас это работает, но у меня есть еще один вопрос здесь? В случае генерации различного сообщения об ошибке типа «Пожалуйста, укажите флажок» и «Пожалуйста, выберите из списка» для каждого типа ошибок. Как мы можем обрабатывать их только в одном условии if()? – Suffii

+0

А, это другое. Позвольте мне переписать пример. – Stanimir

+0

Извините за задержку, попробуйте сейчас. – Stanimir

Смежные вопросы