【问题标题】:Javascript - Display a different content if a checkbox is activeJavascript - 如果复选框处于活动状态,则显示不同的内容
【发布时间】:2022-02-11 22:49:52
【问题描述】:

我正在尝试在 JQuery 中设置一些东西,但目前我不确定我是否做得对。

为了简单起见,我想显示 4 个复选框。这些复选框用作过滤器。例如,假设第一个复选框是春季,第二个是夏季,第三个是秋季,第四个是冬季。

当我选中“夏季”框时,我希望显示一些文本。如果我勾选秋季,则会显示另一个文本。基本上,我想根据勾选的内容显示不同的文本。

<script type="text/javascript">
    function ShowHideDiv(winter) {
        var winter_list = document.getElementById("winter_list");
        winter_list.style.display = winter.checked ? "block" : "none";
    }
</script>
<script type="text/javascript">
    function ShowHideDiv(summer) {
        var summer_list = document.getElementById("summer_list");
        summer_list.style.display = summer.checked ? "block" : "none";
    }
</script>

<label for="checkWinter">
    <input type="checkbox" id="winter" onclick="ShowHideDiv(winter)" />
    Winter
</label>
<label for="checkSummer">
    <input type="checkbox" id="summer" onclick="ShowHideDiv(summer)" />
    Summer
</label>
<hr />


<!-- For Winter -->
<div id="winter_list" style="display: none">
<p>Text come here</p>
</div>


<!-- For Summer -->
<div id="summer_list" style="display: none">
<p>Text come here for summer</p>
</div>

如果可能:我们是否可以勾选多个框?

我一直在关注 StackOverflow 上的教程,但到目前为止没有取得多大成功,因为我在我的同一请求类型中没有找到任何东西。

谢谢

【问题讨论】:

  • 欢迎来到 SO。请尝试一一开始处理您的要求。如果您在某个时候遇到困难,请自行解决。如果您无法实现它,请使用相关代码发布问题。
  • 我也试过这个帖子[link]stackoverflow.com/questions/901712/…我的复选框显示,但是当我点击第一个或第二个时,显示相同的文本。刚刚添加了我的代码
  • @Moerip 您使用标准 javascript,但您标记了 jquery。你更喜欢哪种方式?
  • @Reporter 如果我们可以在 Javascript 中做到这一点,我更喜欢在 javascript 中

标签: javascript html jquery forms


【解决方案1】:

你对代码的思考有误。

函数ShowHideDiv()确实存在两次并且Javascript重载了它。因为您传递了一个未定义的对象,所以浏览器会选择其中一个。

我的建议:

第一步:将输入字段中的函数调用替换为&lt;input type="checkbox" id="summer" onclick="ShowHideDiv(this)" /&gt;。参数this 将点击的对象传递给目标函数。

第二步:将所有函数“ShowHideDiv”合并为一个:

function ShowHideDiv(checkbox) {
   switch (checkbox.id)
   {
      case "summer":
            var summer_list = document.getElementById("summer_list");
             summer_list.style.display = summer.checked ? "block" : "none";
         break;
      case "winter":
          var winter_list = document.getElementById("winter_list");
                winter_list.style.display = winter.checked ? "block" : "none";
          break;
      default:
        //What ever you want do to
        break;
   }
}

参数checkbox.id从传递的复选框的属性id返回值。

Switch and caseif() else if() and else() 的较小形式。

【讨论】:

    【解决方案2】:

    首先,为所有复选框指定id。 然后您可以将data-target 添加到显示文本中以便于选择。试试这个

    <label for="winter">
        <input type="checkbox" id="winter" onchange="ShowHideDiv(this)" />
        Winter
    </label>
    <label for="summer">
        <input type="checkbox" id="summer" onchange="ShowHideDiv(this)" />
        Summer
    </label>
    <hr />
    
    <!-- Display text -->
    <div>
        <p style="display: none" data-target="#winter">Text come here</p>
        <p style="display: none" data-target="#summer">Text come here for summer</p>
    </div>
    
    <script type="text/javascript">
        function ShowHideDiv(elem) {
            var target = document.querySelector('[data-target="#'+elem.id+'"]');
            target.style.display = elem.checked ? 'block' : 'none';
        }
    </script>

    【讨论】:

      【解决方案3】:

      我能想到的最简单、最干净的解决方案是:

      const ShowHideDiv = function (check, season) {
        let el = document.getElementById(season);
        
        // hide element(s)
        el.classList.add('hidden');
        
        // Show element(s) if checked
        if(check.checked === true){
          el.classList.remove('hidden');
        }
      }
      .hidden {
        display: none;
      }
      <label for="checkWinter">
          <input id="checkWinter" type="checkbox" onchange="ShowHideDiv(this, 'winter')" />
          Winter
      </label>
      <label for="checkSummer">
          <input id="checkSummer" type="checkbox" onchange="ShowHideDiv(this, 'summer')" />
          Summer
      </label>
      <label for="checkSpring">
          <input id="checkSpring" type="checkbox" onchange="ShowHideDiv(this, 'spring')" />
          Spring
      </label>
      <hr />
      
      
      <!-- For Winter -->
      <div class="hidden" id="winter">
        <p>Text come here  for winter</p>
      </div>
      
      
      <!-- For Summer -->
      <div class="hidden" id="summer">
        <p>Text come here for summer</p>
      </div>
      
      
      <!-- For Spring -->
      <div class="hidden" id="spring">
        <p>Text come here for spring</p>
      </div>

      它可以在 2、3 或 4 季中保持不变。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-19
        • 1970-01-01
        • 2019-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多