三重嵌套的JS IF语句

时间:2018-03-15 00:31:48

标签: javascript if-statement nested

我遇到了三重嵌套IF语句的问题。

我有一个带有两个单选按钮的问题的表单,这个问题并不总是可见。我想捕获所做的选择,但是默认情况下,单选按钮没有被选中并且在源代码中仍然可见但是使用CSS display:none来隐藏。因此,我需要指定仅在选择的情况下发送选择的数据(用于测试的控制台日志)。

逻辑应该是,如果div是可见的,检查Q3_1是否被选中,如果是,则发送是,如果是,则检查是否选择了Q3_0,如果是,则发送False,如果未选择则不发送。

我认为拥有如下逻辑会更好,但我也无法使用它。

如果div可见且选择Q3_1则发送是 其他 如果div可见且选择Q3_0则发送否

非常感谢提前。

$(function () {
    // Handler for .ready() called.
    if ($("[id^=divWantMedical]").is(":visible")) {
        if  (document.querySelector("[id$='PreexistingConditions.Question3_1']").checked == true){
            console.log("Send Yes");

        } else {
            if  ((document.querySelector("[id$='PreexistingConditions.Question3_0']").checked == true){
                console.log("Send No");

            } else {
                console.log("Don't send anything");

            }
        }
    }
});

2 个答案:

答案 0 :(得分:0)

if之后还有一个额外的括号:

if  ((document.querySelector("[id$='PreexistingConditions.Question3_0']").checked == true) {

应该是

if  (document.querySelector("[id$='PreexistingConditions.Question3_0']").checked == true){

答案 1 :(得分:0)

对于单选按钮,您应始终确保默认选中一个,否则用户无法在不重新加载页面的情况下返回初始状态(未选中任何按钮)(或重置表单,但重置按钮似乎成为垂死的品种。)

在这种情况下,必须始终选择其中一个按钮,因此您始终会发送true / yes或false / no。

但是,您似乎想要涵盖两者都未被选中的情况(可能取消提交并显示错误消息)。因此,您希望以简化形式执行以下操作:



function doCheck(el) {
  var form = el.form;
  
  if (form.isVisible.checked) {
    if (form.Q[1].checked) {
      form.result.value = 'Send Yes';

    } else if (form.Q[0].checked) {
      form.result.value = "Send No";

    } else {
      form.result.value = "Don't send anything";
    }
  } else {
    form.result.value = 'Element not visible';
  }
}

<form onsubmit="return false">
  <fieldset><legend>Logic test</legend>
    Visible?<input type="checkbox" name="isVisible" checked><br>
    Q3_0<input type="radio" name="Q"><br>
    Q3_1<input type="radio" name="Q"><br>
    <input type="button" value="Test" onclick="doCheck(this)">
    <input type="reset"><br>
  </fieldset>
  <input name="result" readonly>
</form>
&#13;
&#13;
&#13;

如果元素不可见,则 if 逻辑都不会运行。我使用了一个复选框来简化元素是否可见的逻辑。