首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据所选内容生成div

根据所选内容生成div
EN

Stack Overflow用户
提问于 2021-09-24 08:22:46
回答 2查看 50关注 0票数 0

首先,我从来没有真正玩过Javascript,除了找到你聪明的类型创造的东西,然后把它添加到我的网站上。

我想显示一个div的基础上选择的选项在一个下拉页上。

我有1-4的关税,选择的关税显示为t1,t2,t3和t4,但是Divs现在变得看不见了。

我已经用一个简单的按钮测试了div位的显示/隐藏功能,我只是不能让它拿起变量来显示所选的变量。

代码语言:javascript
复制
<div>
                                Value Selected: <span id="current"></span>
                                <br>
                                <br>
                                <select id="select" name="options">
    <option>Choose Your Option</option>
    <option value="t1"> 1</option>
    <option value="t2"> 2</option>
    <option value="t3"> 3</option>
    <option value="t4"> 4</option>
</select>   
                            <div class="t1"><p>Tariff 1</p></div>
                            <div class="t2"><p>Tariff 2</p></div>
                            <div class="t3"><p>Tariff 3</p></div>
                            <div class="t4"><p>Tariff 4</p></div>
                        </div>
代码语言:javascript
复制
function showSelectedItem() {
    var item = document.getElementById("select").value;
   document.getElementById("current").innerHTML = item;
    
    if (item.style.display === 'none') {
    item.style.display = 'block';
  } else {
    item.style.display = 'none';
  }
    
}

document.getElementById("select").addEventListener("change", showSelectedItem);

然后所有的t1,t2.迪夫

.t1 {display: none}

预先谢谢,当你知道你在看什么的时候,我怀疑这是很明显的事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-24 08:36:23

你的css样式不会与item.style.display相适应。上面的选择器只提供内联样式。

逻辑

  • 使用style="display:none"使所有节点最初隐藏在HTML中
  • 在更改时,检查选定的值。
  • 隐藏所有具有与选定值不相同的类名的节点。
  • 如果要在用户选择选项时隐藏下拉列表,可以使用document.getElementById("select")选择下拉列表并设置style.display = 'none'

代码语言:javascript
复制
function showSelectedItem() {
  var item = document.getElementById("select").value;
  document.getElementById("current").innerHTML = item;
  const classes = ['t1', 't2', 't3', 't4'];
  // Toggle visibility;
  classes.forEach((classNode) => {
    document.querySelector(`.${classNode}`).style.display = classNode === item ? 'block': 'none';
  });
  // Hide the dropdown when the user selects an option
  document.getElementById("select").style.display = "none";
}
document.getElementById("select").addEventListener("change", showSelectedItem);
代码语言:javascript
复制
<div>
  Value Selected: <span id="current"></span>
  <br>
  <br>
  <select id="select" name="options">
    <option>Choose Your Option</option>
    <option value="t1"> 1</option>
    <option value="t2"> 2</option>
    <option value="t3"> 3</option>
    <option value="t4"> 4</option>
  </select>
  <div class="t1" style="display: none;">
    <p>Tariff 1</p>
  </div>
  <div class="t2" style="display: none;">
    <p>Tariff 2</p>
  </div>
  <div class="t3" style="display: none;">
    <p>Tariff 3</p>
  </div>
  <div class="t4" style="display: none;">
    <p>Tariff 4</p>
  </div>
</div>

如果您希望css样式也与您的脚本进行反射,则必须使用Window.getComputedStyle() 参考文献

代码语言:javascript
复制
function showSelectedItem() {
  var item = document.getElementById("select").value;
  document.getElementById("current").innerHTML = item;
  const selectedNode = document.querySelector(`.${item}`);
  if (selectedNode) {
    const displayValue = window.getComputedStyle(selectedNode).display;
    const classes = ['t1', 't2', 't3', 't4'];
    classes.forEach((classNode) => {
      document.querySelector(`.${classNode}`).style.display = classNode === item ? 'block': 'none';
    });
    // Hide the dropdown when the user selects an option
    document.getElementById("select").style.display = "none";
  }
}
document.getElementById("select").addEventListener("change", showSelectedItem);
代码语言:javascript
复制
.t1, .t2, .t3, .t4 {
  display: none;
}
代码语言:javascript
复制
<div>
  Value Selected: <span id="current"></span>
  <br>
  <br>
  <select id="select" name="options">
    <option>Choose Your Option</option>
    <option value="t1"> 1</option>
    <option value="t2"> 2</option>
    <option value="t3"> 3</option>
    <option value="t4"> 4</option>
  </select>
  <div class="t1">
    <p>Tariff 1</p>
  </div>
  <div class="t2">
    <p>Tariff 2</p>
  </div>
  <div class="t3">
    <p>Tariff 3</p>
  </div>
  <div class="t4">
    <p>Tariff 4</p>
  </div>
</div>

票数 0
EN

Stack Overflow用户

发布于 2021-09-24 08:46:41

您需要比较div的显示属性,而不是下拉列表的值。

代码语言:javascript
复制
var item = document.getElementById("select").value;
var dv = document.querySelector("."+item);
document.getElementById("current").innerHTML = item;

if (dv.style.display === 'none') {
    dv.style.display = 'block';
} else {
    dv.style.display = 'none';
}

https://jsfiddle.net/palak6041/9wj07ebv/17/

这将不会隐藏其他div,尽管您需要使用其他代码来隐藏它。

下面的示例将隐藏其他div,只有选中的div是可见的。

https://jsfiddle.net/palak6041/9wj07ebv/25/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69311786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档