根据每个选项的值或id筛选选择框
filter select boxes based on value or id of each option
我想使用jquery来过滤表单中的所有选择框
例如:在第一个选择框中,如果我选择"show only 1",我想过滤所有选择元素中的所有选择选项,以隐藏值不包含"_1"的任何选项。只有带"_1"的产品值才会显示。
如果选择了选项"——Filter——",则所有选择框的默认值应为空白
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>
很想知道如何使用Jquery实现上面的
您可以使用contains
选择器"option[value*='" + sel + "']"
来过滤掉值并隐藏。要恢复,请检查所选值是否存在(在您的情况下,它是空白的),并同时显示所有选择的值的重置。
:
$("#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.com/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>
如果你想保持默认值为空白(而不是选择过滤选项),那么只需删除最后一个.prop('selected', true)
。
:
$("#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.com/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>
注意:
IE不允许hide
在option
s上。解决方法是使用.prop('disabled', true)
作为优雅的降级。
小提琴:http://jsfiddle.net/abhitalks/c9a3fLy5/
示例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.com/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>
步骤如下:
1)获取需要基于主选择切换的子选择元素选项元素。
2)写更改事件在主选择
3)隐藏所有的选项,并显示其值包含main select options selected value的选项。
4)在附加事件后触发更改,以确保默认情况下所有其他select元素都是隐藏的
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();
演示工作相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- difference between '$(<%= DDL.ID %>) & $('
- 使用Javascript获取所选选项ID
- 根据id将json数组组合为一个json数组
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 使用AngularJS中的筛选器更新给定的表
- 对id以某个字符串开头的元素进行计数
- 淘汰搜索/筛选
- 如果元素's的ID以数字开头
- 通过id和class属性获取元素
- AngularJS单选筛选不适用于Name、Description和Field4复选框值
- 筛选具有相同id的多个数组中的对象
- 如何筛选要写入新文档的HTML,删除JavaScript中的某些类和/或ID
- OData:对url请求中的数字(ID)字段进行通配符(startswith)筛选
- 获取当前URL未获取ID,基于类的筛选器
- 如何使用Sencha触摸应用程序在列表中按id进行筛选
- 根据每个选项的值或id筛选选择框
- 如何将模板中的唯一id与控制器中的筛选函数相匹配
- 使用id数组对主干集合进行筛选和排序
- 希望在下划线筛选器后返回ID列表