第二个下拉菜单在选择后消失

Javascript - Second Drop-down Menu Disappears After Selection?

本文关键字:消失 选择 下拉菜单 第二个      更新时间:2023-09-26

我有多个相互关联的下拉菜单。第一个选择显示第二个菜单(两个中的一个),第二个菜单又显示内容(菜单异常!)然而,当你完成这个过程时,第二个菜单消失了,我希望它保持打开状态,以便于访问。

目前我想坚持使用纯Javascript,请不要使用JQuery解决方案。

我是新编码,所以轻松哈哈。任何帮助都是感激的,干杯!

document.getElementById('target').addEventListener('change', function() {
  'use strict';
  var vis = document.querySelector('.vis'),
    target = document.getElementById(this.value);
  if (vis !== null) {
    vis.className = 'inv';
  }
  if (target !== null) {
    target.className = 'vis';
  }
});
document.getElementById('trad').addEventListener('change', function() {
  'use strict';
  var vis = document.querySelector('.vis'),
    target = document.getElementById(this.value);
  if (vis !== null) {
    vis.className = 'inv';
  }
  if (target !== null) {
    target.className = 'vis';
  }
});
document.getElementById('simp').addEventListener('change', function() {
  'use strict';
  var vis = document.querySelector('.vis'),
    target = document.getElementById(this.value);
  if (vis !== null) {
    vis.className = 'inv';
  }
  if (target !== null) {
    target.className = 'vis';
  }
});
    p {
      font-size: 2.5vw;
      font-family: arial;
    }
    select {
      width: auto;
      margin: 0;
      font-size: 2.5vw;
      font-family: arial;
    }
    .inv {
      display: none;
    }
<select id="target">
  <option value="">System</option>
  <option value="trad">Traditional</option>
  <option value="simp">Simplfit</option>
  <select>
    <select id="trad" class="inv">
      <option value="">Width</option>
      <option value="content1">400</option>
      <option value="content2">600</option>
      <option value="content3">800</option>
      <option value="content4">1000</option>
      <option value="content5">1210</option>
      <select>
        <select id="simp" class="inv">
          <option value="">Width</option>
          <option value="content6">400</option>
          <option value="content7">600</option>
          <option value="content8">800</option>
          <option value="content9">1000</option>
          <option value="content10">1210</option>
          <select>
            <p id="content1" class="inv">Content 1</p>
            <p id="content2" class="inv">Content 2</p>
            <p id="content3" class="inv">Content 3</p>
            <p id="content4" class="inv">Content 4</p>
            <p id="content5" class="inv">Content 5</p>
            <p id="content6" class="inv">Content 6</p>
            <p id="content7" class="inv">Content 7</p>
            <p id="content8" class="inv">Content 8</p>
            <p id="content9" class="inv">Content 9</p>
            <p id="content10" class="inv">Content 10</p>

问题是您为tradsimp处理程序获取可见元素的方式。

由于您正在使用queryselector获取.vis元素,它将返回当前选择元素,因为它具有vis类而不是content<'d>元素之一,只需微调选择器应解决问题。

document.getElementById('target').addEventListener('change', function() {
  'use strict';
  var vis = document.querySelector('select.vis'),
    target = document.getElementById(this.value),
    ct = document.querySelector('.content.vis');
  if (vis !== null) {
    vis.className = 'inv';
  }
  if (target !== null) {
    target.className = 'vis';
  }
  if (ct != null) {
    ct.className = 'content inv';
  }
});
document.getElementById('trad').addEventListener('change', function() {
  'use strict';
  var vis = document.querySelector('.vis:not(select)'),
    target = document.getElementById(this.value);
  if (vis !== null) {
    vis.className = 'content inv';
  }
  if (target !== null) {
    target.className = 'content vis';
  }
});
document.getElementById('simp').addEventListener('change', function() {
  'use strict';
  var vis = document.querySelector('.vis:not(select)'),
    target = document.getElementById(this.value);
  if (vis !== null) {
    vis.className = 'content inv';
  }
  if (target !== null) {
    target.className = 'content vis';
  }
});
p {
  font-size: 2.5vw;
  font-family: arial;
}
select {
  width: auto;
  margin: 0;
  font-size: 2.5vw;
  font-family: arial;
}
.inv {
  display: none;
}
<select id="target">
  <option value="">System</option>
  <option value="trad">Traditional</option>
  <option value="simp">Simplfit</option>
  <!--Need closing tag here-->
</select>
<select id="trad" class="inv">
  <option value="">Width</option>
  <option value="content1">400</option>
  <option value="content2">600</option>
  <option value="content3">800</option>
  <option value="content4">1000</option>
  <option value="content5">1210</option>
  <!--Need closing tag here-->
</select>
<select id="simp" class="inv">
  <option value="">Width</option>
  <option value="content6">400</option>
  <option value="content7">600</option>
  <option value="content8">800</option>
  <option value="content9">1000</option>
  <option value="content10">1210</option>
  <!--Need closing tag here-->
</select>
<p id="content1" class="content inv">Content 1</p>
<p id="content2" class="content inv">Content 2</p>
<p id="content3" class="content inv">Content 3</p>
<p id="content4" class="content inv">Content 4</p>
<p id="content5" class="content inv">Content 5</p>
<p id="content6" class="content inv">Content 6</p>
<p id="content7" class="content inv">Content 7</p>
<p id="content8" class="content inv">Content 8</p>
<p id="content9" class="content inv">Content 9</p>
<p id="content10" class="content inv">Content 10</p>

document.getElementById('target').addEventListener('change', function() {
  'use strict';
  var vis = document.querySelector('select.vis'),
    target = document.getElementById(this.value),
    ct = document.querySelector('.content.vis');
  if (vis !== null) {
    vis.className = 'inv';
  }
  if (target !== null) {
    target.className = 'vis';
  }
  if (ct != null) {
    ct.className = 'content inv';
  }
});
document.getElementById('trad').addEventListener('change', function() {
  'use strict';
  var vis = document.querySelector('.vis:not(select)'),
    target = document.getElementById(this.value);
  if (vis !== null) {
    vis.className = 'content inv';
  }
  if (target !== null) {
    target.className = 'content vis';
  }
});
document.getElementById('simp').addEventListener('change', function() {
  'use strict';
  var vis = document.querySelector('.vis:not(select)'),
    target = document.getElementById(this.value);
  if (vis !== null) {
    vis.className = 'content inv';
  }
  if (target !== null) {
    target.className = 'content vis';
  }
});
p {
  font-size: 2.5vw;
  font-family: arial;
}
select {
  width: auto;
  margin: 0;
  font-size: 2.5vw;
  font-family: arial;
}
.inv {
  display: none;
}
<select id="target">
  <option value="">System</option>
  <option value="trad">Traditional</option>
  <option value="simp">Simplfit</option>
  <!--Need closing tag here-->
</select>
<select id="trad" class="inv">
  <option value="">Width</option>
  <option value="content1">400</option>
  <option value="content2">600</option>
  <option value="content3">800</option>
  <option value="content4">1000</option>
  <option value="content5">1210</option>
  <!--Need closing tag here-->
</select>
<select id="simp" class="inv">
  <option value="">Width</option>
  <option value="content6">400</option>
  <option value="content7">600</option>
  <option value="content8">800</option>
  <option value="content9">1000</option>
  <option value="content10">1210</option>
  <!--Need closing tag here-->
</select>
<p id="content1" class="content inv">Content 1</p>
<p id="content2" class="content inv">Content 2</p>
<p id="content3" class="content inv">Content 3</p>
<p id="content4" class="content inv">Content 4</p>
<p id="content5" class="content inv">Content 5</p>
<p id="content6" class="content inv">Content 6</p>
<p id="content7" class="content inv">Content 7</p>
<p id="content8" class="content inv">Content 8</p>
<p id="content9" class="content inv">Content 9</p>
<p id="content10" class="content inv">Content 10</p>