javascript - 在html中动态切换字段集

标签 javascript html fieldset

我目前有一个下拉字段,onchange 将输入值。

    function CurrentStatusChanged() {
       var currentS1 = document.getElementById("currentStatus1").value;
       var currentS2 = document.getElementById("currentStatus2").value;

       document.getElementById("currentStatusView1").innerHTML = "You selected: " + currentS1;
       document.getElementById("currentStatusView2").innerHTML = "You selected: " + currentS2;
    }

我创建了许多字段集,然后需要根据下拉框中选择的内容来显示正确的字段集。

我的问题是: 最好的方法是什么?因为我不喜欢innerHTML,所以所有的代码都是很好的做法。

 <fieldset class="employed">
<h2>Employed</h2>
<!-- Textarea -->
<div class="form-group">
  <label class="col-md-4 control-label" for="partTime">If Part Time, please detail your contractual hours per week</label>
  <div class="col-md-4">                     
    <textarea class="form-control" id="partTime" name="partTime"></textarea>
  </div>
</div>

<!-- Text input-->
<div class="form-group">
  <label class="col-md-4 control-label" for="numberOfJobs">Number of Jobs</label>  
  <div class="col-md-4">
  <input id="numberOfJobs" name="numberOfJobs" type="text" placeholder="" class="form-control input-md" required="">

  </div>
</div>

<!-- Text input-->
<div class="form-group">
  <label class="col-md-4 control-label" for="jobDescriptionTitle">Job Description / Title</label>  
  <div class="col-md-4">
  <input id="jobDescriptionTitle" name="jobDescriptionTitle" type="text" placeholder="" class="form-control input-md" required="">

  </div>
</div>

我正在尝试将类似于上面的字段集添加到容器中,但是我至少有 12 个字段集根据下拉列表进行更改。 kindisch 答案不允许 mt 使用完整的字段集,但我相信这是在正确的轨道上。

最佳答案

为此使用模板。例如:

var storage = [],
    select = document.getElementById("selection"),
    container = document.getElementById("container");

select.addEventListener("change", function() {
  var _id = select.value,
      _tpl = document.getElementById(_id);

  save();
  container.innerHTML = _tpl.innerHTML;
  update();
}, false);

// Save current state
function save() {
  var _fields = container.getElementsByClassName("form-control");

  for (var i = 0; i < _fields.length; i++) {
    storage[_fields[i].name] = _fields[i].value;
  }
}

// Fill input fields of element
function update() {
  var _fields = container.getElementsByClassName("form-control");
  
  for (var i = 0; i < _fields.length; i++) {
    if (_fields[i].name in storage) {
      _fields[i].value = storage[_fields[i].name];
    }
  }
}
<select id="selection">
  <option value="status-one">One</option>
  <option value="status-two">Two</option>
  <option value="status-three">Three</option>
</select>

<div id="container"></div>

<script type="text/html" id="status-one">
  <fieldset class="employed">
    <h2>Employed</h2>
    <!-- Textarea -->
    <div class="form-group">
      <label class="col-md-4 control-label" for="partTime">If Part Time, please detail your contractual hours per week</label>
      <div class="col-md-4">
        <textarea class="form-control" id="partTime" name="partTime"></textarea>
      </div>
    </div>

    <!-- Text input-->
    <div class="form-group">
      <label class="col-md-4 control-label" for="numberOfJobs">Number of Jobs</label>
      <div class="col-md-4">
        <input id="numberOfJobs" name="numberOfJobs" type="text" placeholder="" class="form-control input-md" required="">
      </div>
    </div>

    <!-- Text input-->
    <div class="form-group">
      <label class="col-md-4 control-label" for="jobDescriptionTitle">Job Description / Title</label>
      <div class="col-md-4">
        <input id="jobDescriptionTitle" name="jobDescriptionTitle" type="text" placeholder="" class="form-control input-md" required="">
      </div>
    </div>
</script>

<script type="text/html" id="status-two">
  <p>This is status two.</p>
</script>

<script type="text/html" id="status-three">
  <p>This is status three.</p>
</script>

关于javascript - 在html中动态切换字段集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38326942/

相关文章:

javascript - 从状态中的对象 react 映射项

html - 不使用form标签使用fieldset标签是不是错了?

css - 有没有办法让 CSS 边距通过字段集边界折叠?

javascript - 动态隐藏 ExtJS Fieldset 中的控件

javascript - javascript中如何在类之间共享变量

javascript - 如何找到其他重叠号码范围之间的空闲号码范围

javascript - 在javascript中使用DST的日期范围

javascript - 如何在 React JS 中为文本设置颜色

html - CSS:在页面停在视口(viewport)处重复 "noise"

javascript - 使用 React,渲染具有多个嵌套元素的元素的正确方法是什么?