【问题标题】:Showing input fields based on user choice (select)根据用户选择显示输入字段(选择)
【发布时间】:2017-11-30 15:32:25
【问题描述】:

所以我在我的页面上进行了选择,根据用户的选择,我想向他显示输入字段的数量,然后在 php 脚本中对其进行处理。

看起来像这样:

https://i.imgur.com/RlYySko.png

如果用户选择 3 则应出现 3 个输入字段,如果 2 则 2 以此类推,无需重新加载页面。这里应该用什么js什么的?

【问题讨论】:

  • 到目前为止你有没有试过的代码?

标签: javascript select input


【解决方案1】:

假设您有一个已经存在的表单 f,您可以通过循环 x 次来动态创建输入元素,其中 x 是所需的选定输入数量,所以类似于

for ( var i=0;i<x;i++){
    var inputText = document.createElement("input"); //input element, text
    inputText.setAttribute('type',"text");
    inputText.setAttribute('name',"mark" + i);
    f.append(inputText);
}

【讨论】:

  • 您没有考虑存在用户可以更改输入数量的选择元素。
【解决方案2】:

这是一个sn-p,你可以运行并检查它。如果输入数量减少,它还会保留输入值。

var inputNumber = document.getElementById('input-number');
inputNumber.addEventListener('change', changeNumberOfInputs);

function changeNumberOfInputs(event) {
  var desiredInputs = parseInt(event.target.value);
  var inputsForm = document.getElementById('inputs-form');
  var actualInputs = inputsForm.getElementsByTagName('input').length;
  if(actualInputs < desiredInputs) {
    for(var i=0; i<(desiredInputs - actualInputs); i++) {
      inputsForm.appendChild(document.createElement('input'));
    }
  }
  else if(actualInputs > desiredInputs) {
    for(var i=0; i<(actualInputs - desiredInputs); i++) {
      var lastInput = inputsForm.getElementsByTagName('input');
      lastInput = lastInput[lastInput.length - 1];
      inputsForm.removeChild(lastInput);
    }
  }
}
<select id="input-number">
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
</select>

<form id="inputs-form">
  <input />
</form>

【讨论】:

  • 您应该补充,有 1 个输入字段 onload,而不是 0!
  • 谢谢。刚刚修好
【解决方案3】:

您想要做的是创建所有 6 个输入字段。然后将它们全部隐藏为标准,并执行document.getElementById(id).style 以获取样式。然后在 Select 发生变化时调用一个函数,并使用选定的值来发现隐藏的输入!

正如@Arthur Cantarela 所说,这在 JS 中是一种不好的做法。 或者,您可以将它们放在一个 div 中,并根据需要更改 div 的 innerHTML!

【讨论】:

  • 创建未使用的元素并隐藏它们在 DOM 操作中是一种不好的做法。
  • 我不知道。我很少用 JS 和 HTML 开发东西!
【解决方案4】:

您可以在 angularjs 中使用 ng-repeat 并将数字选择绑定到重复表达式。

【讨论】:

  • 使用角度来执行这个简单的任务就像使用炸弹杀死苍蝇一样。有简单的纯js解决方案。
  • 也许可以,但是使用库并没有错。我认为您的解决方案也不是特别简单。
  • 其实有:添加js库需要在客户端加载和处理更多的js数据,让你的应用变慢。我的解决方案的“简单性”是关于使用 js 原生 dom 操作
猜你喜欢
  • 2023-01-27
  • 1970-01-01
  • 2021-10-01
  • 2020-12-28
  • 1970-01-01
  • 2013-03-12
  • 2022-01-18
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多