简体   繁体   English

jQuery-检查下拉列表 <select>用于多个值和任何更改

[英]jQuery - Check drop-downs <select> for multiple values and for any changes

My team is building out a form for an upcoming company giveaway / competition and are in need of some assistance. 我的团队正在为即将到来的公司赠品/比赛建立表格,需要一些帮助。 This form is centered on 10 multiple choice questions, for which we will provide the answers amongst 20 options in the right-hand column. 该表格以10个多项选择题为中心,我们将在右侧栏中为20个选项提供答案。

Our goal is to scratch out any guesses the users make as they progress through the 10 fields using JavaScript or jQuery. 我们的目标是消除用户使用JavaScript或jQuery浏览10个字段时所做的任何猜测。 The code I'm going to share effectively adds the desired CSS effect to the corresponding selection and it removes the class if that drop-down field is changed. 我将要共享的代码将所需的CSS效果有效地添加到了相应的选择中,并且如果该下拉字段发生了更改,它将删除该类。 This would work if we were only using one drop-down select. 如果我们仅使用一个下拉选择,这将起作用。

However, the issue I've run into is the CSS class, unless you pick the same option value as the one you previously selected, is removed once you make your next selection. 但是,除非您选择与先前选择的选项相同的选项值,否则我遇到的问题是CSS类,一旦您进行了下一个选择,就将其删除。 For example, if you choose 'One' in the first drop-down, it will be correctly crossed out until you select any other option value (ie 2-20) in drop-downs two through ten. 例如,如果您在第一个下拉列表中选择“一个”,它将被正确划掉,直到您在第二个到第十个下拉列表中选择任何其他选项值(即2-20)。 That second selection will be the lone list item crossed out. 第二个选择将是删除的唯一列表项。

Goal : If the option value is selected from any drop-down, it needs to be crossed out. 目标 :如果从任何下拉列表中选择了选项值,则需要将其删除。 If it is chosen and then deselected from all drop-downs, the CSS class needs to be removed completely. 如果选择它,然后从所有下拉菜单中取消选择,则需要完全删除CSS类。

I apologize if my formatting and question is not clear; 如果格式和问题不清楚,我深表歉意。 this is my first post. 这是我的第一篇文章。 Thank you in advance. 先感谢您。

fiddle: https://jsfiddle.net/ehcx8vun/16/ 小提琴: https : //jsfiddle.net/ehcx8vun/16/

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="left">
  <select name="one" class="mySelect">
  <option value="">---</option>
  <option value="One">One</option>
  <option value="Two">Two</option>
  <option value="Three">Three</option>
  <option value="Four">Four</option>
  <option value="Five">Five</option>
</select>

  <select name="two" class="mySelect">
  <option value="">---</option>
  <option value="One">One</option>
  <option value="Two">Two</option>
  <option value="Three">Three</option>
  <option value="Four">Four</option>
  <option value="Five">Five</option>
</select>

  <select name="three" class="mySelect">
  <option value="">---</option>
  <option value="One">One</option>
  <option value="Two">Two</option>
  <option value="Three">Three</option>
  <option value="Four">Four</option>
  <option value="Five">Five</option>
</select>

  <select name="four" class="mySelect">
  <option value="">---</option>
  <option value="One">One</option>
  <option value="Two">Two</option>
  <option value="Three">Three</option>
  <option value="Four">Four</option>
  <option value="Five">Five</option>
</select>

  <select name="five" class="mySelect">
  <option value="">---</option>
  <option value="One">One</option>
  <option value="Two">Two</option>
  <option value="Three">Three</option>
  <option value="Four">Four</option>
  <option value="Five">Five</option>
</select>

</div>

<div class="right">
  <ul>
    <li class="multiple-choice-list">One</li>
    <li class="multiple-choice-list">Two</li>
    <li class="multiple-choice-list">Three</li>
    <li class="multiple-choice-list">Four</li>
    <li class="multiple-choice-list">Five</li>
  </ul>
</div>

You can get all the selected values using map() and filter() . 您可以使用map()filter()获得所有选定的值。 Loop thru all select and hide the selected options. 遍历所有选择并隐藏所选选项。

to cross out the <li> s, you can loop thru the <li> s and check if selected using includes() 要划掉<li> ,您可以遍历<li>并检查是否使用includes()

 $('select').change(function() { var selected = $('select').map(function() { return this.value; }).get().filter(o => o !== ''); //Hide Selected on drop downs if ($(this).val() != "") { $("select").not(this).find("option").show().filter(function() { return $(this).val() != "" && selected.includes($(this).val()); }).hide(); } else { $("select").find("option").show().filter(function() { return $(this).val() != "" && selected.includes($(this).val()); }).hide(); } //Remove all class on li $('ul li').removeClass('selected-option'); //Add class to all selected $('ul li').each(function() { if (selected.includes($(this).text())) $(this).addClass('selected-option'); }) }); 
 .left { float: left; width: 75%; } .right { float: right; width: 25%; list-style: none; background: blue; color: #fff; } .right li { list-style: none; } .selected-option { opacity: .5; text-decoration: line-through; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="left"> <select name="one" class="mySelect"> <option value="">---</option> <option value="One">One</option> <option value="Two">Two</option> <option value="Three">Three</option> <option value="Four">Four</option> <option value="Five">Five</option> </select> <select name="two" class="mySelect"> <option value="">---</option> <option value="One">One</option> <option value="Two">Two</option> <option value="Three">Three</option> <option value="Four">Four</option> <option value="Five">Five</option> </select> <select name="three" class="mySelect"> <option value="">---</option> <option value="One">One</option> <option value="Two">Two</option> <option value="Three">Three</option> <option value="Four">Four</option> <option value="Five">Five</option> </select> <select name="four" class="mySelect"> <option value="">---</option> <option value="One">One</option> <option value="Two">Two</option> <option value="Three">Three</option> <option value="Four">Four</option> <option value="Five">Five</option> </select> <select name="five" class="mySelect"> <option value="">---</option> <option value="One">One</option> <option value="Two">Two</option> <option value="Three">Three</option> <option value="Four">Four</option> <option value="Five">Five</option> </select> </div> <div class="right"> <ul> <li class="multiple-choice-list">One</li> <li class="multiple-choice-list">Two</li> <li class="multiple-choice-list">Three</li> <li class="multiple-choice-list">Four</li> <li class="multiple-choice-list">Five</li> </ul> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM