2015-07-20 4 views
0
function checkforinput() { 

    var valid = true; 
    var date = document.getElementById('date'); 
    var time = document.getElementById('time'); 
    var checkbox = document.getElementById('checkbox-1-1'); 
    if (date.value == "" && time.value == "" && checkbox.checked == false || date.value !== "undefined" && time.value !== "undefined" && checkbox.checked) { 
     document.getElementById('errMsg10').innerHTML = "*Please Schedule in Advance or Select Now"; 
     valid = false; 
    } else { 
     document.getElementById('errMsg10').innerHTML = ""; 
    } 

    return valid; 
} 

HTML-:Каков правильный формат этого оператора if/else?

<input id="date" class="datentime" type="date" name="date" min="2015-07-18" max="2015-12-31" value="1"/> 
<input id="time" class="datentime" type="time" name="time" value="1"/><br> 
<h2 class="bottomOpt">OR</h2><span id="errMsg10"></span> 
<h1 class="bottomOpt"><span class="adnow">Now</span><br><span id="asap">*We'll send help ASAP.</span></h1> 
<input type="hidden" name="now" value="0"/> 
<input type="checkbox" id="checkbox-1-1" class="regular-checkbox" name="now" value="1" /><label for="checkbox-1-1"></label> 
<input type="hidden" name="status" value="3"/> 

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

Первая часть инструкции if/else, похоже, работает нормально, но код после || в условном выражении кажется неправильным. Если выбрана дата и время, но флажок не установлен, код работает. Если флажок установлен, но дата и время не выбраны, код не работает. Он по-прежнему отображает errMsg10.

+0

Вам нужны скобки ... вокруг частей, которые необходимо проверить вместе. – epascarello

ответ

0
if ((!date.value && !time.value && !checkbox.checked) 
    || (date.value && time.value && checkbox.checked)) { 

Поскольку ваше состояние является OR условно, группирует 2 заявления в явные блоки, так что Оценивало правильное значение.

Также должно быть хорошо, только для проверки на !time.value вместо проверки на неопределенное явно. Он будет заботиться проверки определено, является пустым или 0.

Также обратите внимание, что использование === быстрее, чем при использовании операции ==

+0

что-то, что я только что понял, это то, что если выбрано время или дата, и флажок установлен, форма будет проходить. В любом случае, я могу сказать JS, что если date.value и/или! Time.value, не позволяйте форме пройти? Я просто попробовал && || но это не сработало. Я предполагаю, что это неверный код. –

+0

Вы не можете использовать '&& ||', поскольку это недопустимо, так как '&&', '||' являются двоичными операторами, каждый из которых должен быть разделен двумя 'операндами'. –

1

Поместить в другой набор скобок для правильной группы булева логика.

if ((date.value == "" && time.value == "" && checkbox.checked == false) || 
    (date.value !== "undefined" && time.value !== "undefined" && checkbox.checked)) { 
     // bad input... 
    } 
else { 
    // good input... 
} 

Кстати, вы уверены, что хотите кавычек «неопределенный», чтобы сравнить с этой строкой, или вы имеете в виду JavaScript undefined константу ???

1

Это медведь условного оператора: P

После || оператор, у вас есть два знака равенства с! оператор. Попробуйте заменить их на:

date.value != "undefined" && time.value != "undefined" 
Смежные вопросы