【问题标题】:Triple nested JS IF statement三重嵌套的 JS IF 语句
【发布时间】:2018-03-15 09:01:10
【问题描述】:

我在使用三重嵌套 IF 语句时遇到问题。

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

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

我认为最好有下面的逻辑,但我也无法让它工作。

如果 div 可见并且选择了 Q3_1,则发送 Yes 别的 如果 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");

            }
        }
    }
});

【问题讨论】:

  • 不需要 `== true`,因为 checked 属性返回一个布尔值。我已将缩进固定为一致,是否清楚为什么它现在不能按预期工作?
  • 谢谢 Rob,我在 console.log("Send No");行
  • 因为你有来自if (( 的不平衡括号。我已经发布了一个答案,这实际上只是简化了逻辑,不需要额外的嵌套。 ;-)

标签: javascript if-statement nested


【解决方案1】:

if 后面多了一个括号:

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

应该是

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

【讨论】:

    【解决方案2】:

    对于单选按钮,您应该始终确保默认选中一个,否则用户无法在不重新加载页面(或重置表单,但重置按钮似乎是一个垂死的品种)。

    在这种情况下,必须始终选择其中一个按钮,因此您将始终发送 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>

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

    【讨论】:

    • 谢谢 Rob,对不起,我应该补充一点,我不能对现场代码进行任何更改。我正在将 JS 添加到 Google 跟踪代码管理器中的标记中。
    • @AlexAsigno—好的,我只是想以简化的形式呈现逻辑。
    猜你喜欢
    • 1970-01-01
    • 2020-01-02
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多