javascript - 根据循环的选择框选择动态显示和隐藏字段

标签 javascript jquery html

我想根据所做的选择动态显示和隐藏特定的输入字段。我用 for 循环尝试了它,但它一次显示了两个输入,这是我不想要的。我希望它显示例如:当我选择 Performer 1 时,它显示 Performer1f 和 Performer1l 但隐藏其他。我知道我可以对其进行硬编码以显示和隐藏,但当您有大约 100 个字段需要根据选择来显示和隐藏时,它的长度就太长了。

非常感谢您的帮助。提前致谢。

function perfChange() {

  $('.myselectperf option').each(function(){

   var size=$('#myselectperf option').length;

  // as a comma separated string

   for (z=1; z<=size; z++){
    if (this.value == "Performer "+z+"") {
      //$(".myselectperf option[value='Pianoforte']").add();
      //$(".myselectperf option[value='Performer "+z+"']").remove();
       //$('#mul_cat').value="testing";
     $("#Performer"+z+"f").show();
     $("#Performer"+z+"l").show();
     $("#performerLabel").show();
    }
    else {
      $("#Performer"+z+"f").hide();
     $("#Performer"+z+"l").hide();
     $("#performerLabel").hide();

    }

  }

  });
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="myselect" id="myselect" onChange="perfChange();"  >
  <option value="" selected>-Select-</option>
  <option value="Performer 1" >Performer 1</option>
  <option value="Performer 2" >Performer 2</option>
  <option value="Performer 3" >Performer 3</option>
  <option value="Performer 4" >Performer 4</option>
  <option value="Performer 5" >Performer 5</option>
  </select>

<input type="text" id="Performer1f" style="display: none; width: 100%;" name='entryname1f[]' placeholder="Performer 1 First Name " />

<input type="text" id="Performer2f" style="display: none; width: 100%;" name='entryname1f[]' placeholder="Performer 2 First Name "/>

<input type="text" id="Performer3f" style="display: none; width: 100%;" name='entryname1f[] ' placeholder="Performer 3 First Name "/>

<input type="text" id="Performer4f" style="display: none; width: 100%;" name='entryname1f[]' placeholder="Performer 4 First Name "/>

<input type="text" id="Performer5f" style="display: none; width: 100%;" name='entryname1f[]' placeholder="Performer 5 First Name "/>



<input type="text" id="Performer1l" style="display: none; width: 100%;" name='entryname1l[]' placeholder="Performer 1 Last Name " />

<input type="text" id="Performer2l" style="display: none; width: 100%;" name='entryname1l[]' placeholder="Performer 2 Last Name "/>

<input type="text" id="Performer3l" style="display: none; width: 100%;" name='entryname1l[] ' placeholder="Performer 3 Last Name "/>

<input type="text" id="Performer4l" style="display: none; width: 100%;" name='entryname1l[]' placeholder="Performer 4 Last Name "/>

<input type="text" id="Performer5l" style="display: none; width: 100%;" name='entryname1l[]' placeholder="Performer 5 Last Name "/>

最佳答案

这是我想出的解决方案。

  • 使用 $('#myselect').on('change'...) 绑定(bind)更改事件 到选择
  • 隐藏所有其他元素,以免堆叠其他元素 之前的选择。
  • 随后使用e.target.value获取option的值。
  • 使用该值与输入id进行比较。 [插入符 (^) 匹配 id 的开头]
  • 使用.show()我们可以在jQuery中显示隐藏的项目。

代码:

<小时/>

$('#myselect').on('change', e => {
  // Hide all input with type `text` upon change
  // You can edit this code to match an ID or a Class instead
  $('input[type="text"]').hide();
  
  // Retrieved value of the `option`
  let value = e.target.value;
  
  // Select all elements that `start` with the id value
  let foundInputs = $(`input[id^="${value}"]`);
  
  // Show the selected inputs
  foundInputs.show();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="myselect" id="myselect">
  <option value="" selected>-Select-</option>
  <option value="Performer1">Performer 1</option>
  <option value="Performer2">Performer 2</option>
  <option value="Performer3">Performer 3</option>
  <option value="Performer4">Performer 4</option>
  <option value="Performer5">Performer 5</option>
</select>

<input type="text" id="Performer1f" style="display: none; width: 100%;" name='entryname1f[]' placeholder="Performer 1 First Name " />

<input type="text" id="Performer2f" style="display: none; width: 100%;" name='entryname1f[]' placeholder="Performer 2 First Name " />

<input type="text" id="Performer3f" style="display: none; width: 100%;" name='entryname1f[] ' placeholder="Performer 3 First Name " />

<input type="text" id="Performer4f" style="display: none; width: 100%;" name='entryname1f[]' placeholder="Performer 4 First Name " />

<input type="text" id="Performer5f" style="display: none; width: 100%;" name='entryname1f[]' placeholder="Performer 5 First Name " />

<input type="text" id="Performer1l" style="display: none; width: 100%;" name='entryname1l[]' placeholder="Performer 1 Last Name " />

<input type="text" id="Performer2l" style="display: none; width: 100%;" name='entryname1l[]' placeholder="Performer 2 Last Name " />

<input type="text" id="Performer3l" style="display: none; width: 100%;" name='entryname1l[] ' placeholder="Performer 3 Last Name " />

<input type="text" id="Performer4l" style="display: none; width: 100%;" name='entryname1l[]' placeholder="Performer 4 Last Name " />

<input type="text" id="Performer5l" style="display: none; width: 100%;" name='entryname1l[]' placeholder="Performer 5 Last Name " />

关于javascript - 根据循环的选择框选择动态显示和隐藏字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51210764/

相关文章:

javascript - jwPlayer 在 IE8 中不工作

javascript - 在 Jquery/Javascript 中检查一个 URL

javascript - Angular JS路由不起作用

javascript - 使用 jquery 验证器插件设置十进制数的正则表达式

javascript - 使用 jQuery 包裹元素

javascript - 如何用JS引用动态创建的div

php - jquery progressbar - 一次加载所有

javascript - 生成可打开链接模式窗口的可嵌入代码

html - 帮助在网页中嵌入一些 html

javascript - 如何将 Svg Circle 放在页面中间