【问题标题】:javascript show/hide div's based on *multiple* selectionsjavascript 显示/隐藏 div 基于 *multiple* 选择
【发布时间】:2019-12-05 21:57:54
【问题描述】:

我正在为我的家具公司建立一个网站,并且正在自学一些 JavaScript。我的产品有两个变量,woodtype(按钮)和 tablesize(下拉菜单)。我的电子商务 api 需要每个产品都有一个独特的“添加到购物车”div。我想根据独特的木型和表格大小选择显示/隐藏适当的“添加到购物车”(var atc)div。这是我的代码。不知道我在这里做错了什么。

感谢任何帮助!

var atc = "woodtype" + "tablesize";
var woodtype;
var tablesize;

$(document).ready(function(){
    $('#SELECTSIZE').on('change', function() {
      if ( this.value == '2')
      {
       var tablesize = "2";
      }
      else if ( this.value == '4')
      {
       var tablesize = "4";
      }
      else if ( this.value == '8')
      {
       var tablesize = "8";
       }
      else
      {
        var tablesize = "6";
      }
    });
});

$(document).ready(function(){
    $('#SELECTWOOD').on('change', function() {
      if ( this.value == 'MAPLE')
      {
       var woodtype = "M";
      }
      else
      {
        var woodtype = "W";
      }
    });
});

$(document).ready(function(){
      if ( atc = "M4")
      {
        $("#M4").show();
      }
      else
      {
        $("#M4").hide();
      }
<body>

<div id='SELECTWOOD'>
<button value="WALNUT">SOLID WALNUT</option>
<button value="MAPLE">SOLID MAPLE</option>
</div>
<br>
<select id='SELECTSIZE'>
<option value="2">2 SEATER (30")</option>
<option value="4">4-6 SEATER (60")</option>
<option value="6">6 SEATER (76")</option>
<option value="8">8 SEATER (84")</option>
</select>
<br>
<div style='display:none;' id='W2'>ADD TO CART1<br/></div>
<div style='display:none;' id='W4'>ADD TO CART2<br/></div>
<div style='display:none;' id='W6'>ADD TO CART3<br/></div>
<div style='display:none;' id='W8'>ADD TO CART4<br/></div>
<div style='display:none;' id='M2'>ADD TO CART5<br/></div>
<div style='display:none;' id='M4'>ADD TO CART6<br/></div>
<div style='display:none;' id='M6'>ADD TO CART7<br/></div>
<div style='display:none;' id='M8'>ADD TO CART8<br/></div>
</body>

【问题讨论】:

  • 您好,请不要苛刻,但这里很多都是错误的。我可以理解你急于解决这个问题的愿望,但你真的可能需要先查阅一些书籍/教程。首先,您不需要 2 个文档/就绪块,并且您的变量属于其中。其次,除了所有那些 if 语句,您可能只需使用一个语句:tablesize=this.value(或 woodtype,视情况而定)。这些更改将使您的代码的调试和/或推理变得更加容易。

标签: javascript variables dropdown show-hide


【解决方案1】:

有很多事情可以做不同的事情。

这种方式为适当的 div 构建选择。

var atc;
var woodtype;
var tablesize=2;
  
    $('#SELECTSIZE').on('change', function() {
      if ( this.value === '2')
      {
        tablesize = "2";
      }
      else if ( this.value == '4')
      {
        tablesize = "4";
      }
      else if ( this.value == '8')
      {
        tablesize = "8";
       }
      else
      {
         tablesize = "6";
      }
      
      doit();
      
    });


  
  $("#maple").click(function() {
        woodtype = "M";
        doit();
  });
     
    $("#walnut").click(function() {

        woodtype = "W";
      
        doit();
      
    });

function doit(){
      atc = woodtype + tablesize;
      console.log("atc: "+atc);
      
      // hide all the cart divs
      $(".cartdiv").hide();
  
      // unhide the one selected
      $("#"+atc).show();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div id='SELECTWOOD'>
<button id="walnut" value="WALNUT">SOLID WALNUT</option>
<button id="maple"  value="MAPLE">SOLID MAPLE</option>
</div>
<br>
<select id='SELECTSIZE'>
<option value="2">2 SEATER (30")</option>
<option value="4">4-6 SEATER (60")</option>
<option value="6">6 SEATER (76")</option>
<option value="8">8 SEATER (84")</option>
</select>
<br>
<div class="cartdiv" style='display:none;' id='W2'>ADD TO CART1<br/></div>
<div class="cartdiv"  style='display:none;' id='W4'>ADD TO CART2<br/></div>
<div class="cartdiv"  style='display:none;' id='W6'>ADD TO CART3<br/></div>
<div class="cartdiv"  style='display:none;' id='W8'>ADD TO CART4<br/></div>
<div class="cartdiv"  style='display:none;' id='M2'>ADD TO CART5<br/></div>
<div class="cartdiv"  style='display:none;' id='M4'>ADD TO CART6<br/></div>
<div class="cartdiv"  style='display:none;' id='M6'>ADD TO CART7<br/></div>
<div class="cartdiv"  style='display:none;' id='M8'>ADD TO CART8<br/></div>

【讨论】:

  • 哇!非常感谢你做的这些。效果很好。
【解决方案2】:

我可以看到的第一件事是您通过多次重新定义 tablesize 变量来覆盖它。

例子:

var tablesize;

$(document).ready(function(){
    $('#SELECTSIZE').on('change', function() {
      if ( this.value == '2')
      {
       tablesize = "2";
      }
      else if ( this.value == '4')
      {
       tablesize = "4";
      }
      else if ( this.value == '8')
      {
       tablesize = "8";
       }
      else
      {
       tablesize = "6";
      }
    });
});

【讨论】:

  • gotcha - 那么如何让变量值在选择时更改而不覆盖它?
  • 在最后一个 document.ready 中,您需要重新计算 atc 的值,即var atc = woodtype + tablesize。这是需要的,因为在当前状态下,您的 atc 值为“woodtypetablesize”,我认为这不是您想要的。
  • 另外,你应该在if ( atc = "M4")中使用==(比较运算符)而不是=(赋值运算符)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多