admin管理员组文章数量:1325154
I would like to use jquery to filter all select boxes in a form
For example: In the first select box, if i select "show only 1", I want to filter all the select options in all the select elements to hide any option where the value does not contain "_1". Only product value with "_1" should show up.
If the option "---Filter---" is selected then the default value for all the select boxes should be blank
Here is the HTML
<select id="selectlist" name="selectlist" >
<option value="">---Filter---</option>
<option value="1">show only 1</option>
<option value="2">show only 2</option>
<option value="3">show only 3</option>
</select>
<br><br>
homeware<select id="select1" name="select1">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
<br>
electronics<select id="select2" name="select2">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
<br>
kitchen<select id="select3" name="select3">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
Would love to know how to use Jquery to achieve the above
I would like to use jquery to filter all select boxes in a form
For example: In the first select box, if i select "show only 1", I want to filter all the select options in all the select elements to hide any option where the value does not contain "_1". Only product value with "_1" should show up.
If the option "---Filter---" is selected then the default value for all the select boxes should be blank
Here is the HTML
<select id="selectlist" name="selectlist" >
<option value="">---Filter---</option>
<option value="1">show only 1</option>
<option value="2">show only 2</option>
<option value="3">show only 3</option>
</select>
<br><br>
homeware<select id="select1" name="select1">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
<br>
electronics<select id="select2" name="select2">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
<br>
kitchen<select id="select3" name="select3">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
Would love to know how to use Jquery to achieve the above
Share Improve this question asked Aug 24, 2015 at 13:36 user3436467user3436467 1,7753 gold badges23 silver badges37 bronze badges2 Answers
Reset to default 3You can use the contains
selector "option[value*='" + sel + "']"
to filter out the values and hide. To revert back, check if the selected value exists (in your case it is blank) and show at the same time resetting the value on all selects.
Example:
$("#selectlist").on("change", function() {
var sel = $(this).val(),
$ddl = $("#select1, #select2, #select3");
if (!sel) { // if there is no value means first option is selected
$ddl.find("option").show(); $ddl.val(''); // show all options and reset the value
}
else {
$ddl.find("option").hide(); // hide all options
// show only those options which contain the selected value,
// set the selected property to true for the only remaining ones
$ddl.find("option[value*='" + sel + "']").show().prop('selected', true);
}
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="selectlist" name="selectlist" >
<option value="">---Filter---</option>
<option value="1">show only 1</option>
<option value="2">show only 2</option>
<option value="3">show only 3</option>
</select>
<br><br>
homeware<select id="select1" name="select1">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
<br>
electronics<select id="select2" name="select2">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
<br>
kitchen<select id="select3" name="select3">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
If you want to keep the default value as always blank (instead of selecting the filtered option), then just remove the last .prop('selected', true)
.
Example 2:
$("#selectlist").on("change", function() {
var sel = $(this).val(),
$ddl = $("#select1, #select2, #select3");
if (!sel) { // if there is no value means first option is selected
$ddl.find("option").show(); $ddl.val(''); // show all options and reset the value
}
else {
$ddl.find("option").hide(); // hide all options
// show only those options which contain the selected value,
// set the selected property to true for the only remaining ones
$ddl.find("option[value*='" + sel + "']").show();
}
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="selectlist" name="selectlist" >
<option value="">---Filter---</option>
<option value="1">show only 1</option>
<option value="2">show only 2</option>
<option value="3">show only 3</option>
</select>
<br><br>
homeware<select id="select1" name="select1">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
<br>
electronics<select id="select2" name="select2">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
<br>
kitchen<select id="select3" name="select3">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
Note:
IE doesn't allow hide
on option
s. The workaround would be to use .prop('disabled', true)
as a graceful degradation.
Fiddle: http://jsfiddle/abhitalks/c9a3fLy5/
Example 3:
$("#selectlist").on("change", function() {
var sel = $(this).val(),
$ddl = $("#select1, #select2, #select3");
if (!sel) { // if there is no value means first option is selected
$ddl.find("option").show().prop('disabled', false); $ddl.val(''); // show all options and reset the value
}
else {
$ddl.find("option").hide().prop('disabled', true); // hide all options
// show only those options which contain the selected value,
// set the selected property to true for the only remaining ones
$ddl.find("option[value*='" + sel + "']").show().prop('selected', true).prop('disabled', false);
}
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="selectlist" name="selectlist" >
<option value="">---Filter---</option>
<option value="1">show only 1</option>
<option value="2">show only 2</option>
<option value="3">show only 3</option>
</select>
<br><br>
homeware<select id="select1" name="select1">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
<br>
electronics<select id="select2" name="select2">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
<br>
kitchen<select id="select3" name="select3">
<option value=""></option>
<option value="product_1">product 1</option>
<option value="product_2">product 2</option>
<option value="product_3">product 3</option>
</select>
Here are the steps:
1) Get the sub select elements option elements that needs to be toggled based on main select.
2) write change event on main select
3) Hide all the options and show the options whose values contains main select options selected value.
4) trigger the change after attaching event to make sure by default all other select elements are hidden
var otherselectoption = $('#select1,#select2,#select3').find('option');
$('#selectlist').change(function(){
var selected = $(this).val();
otherselectoption.hide().filter(function(){
return ($(this).attr('value').indexOf(selected) > -1 || $(this).attr('value') == "")
}).show();
}).change();
Working Demo
本文标签: javascriptfilter select boxes based on value or id of each optionStack Overflow
版权声明:本文标题:javascript - filter select boxes based on value or id of each option - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742153562a2423643.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论