具有相同名称和不同 id 的选择字段数组
Array of select field with same name and different id.
我有一个选择字段数组,所有字段都具有相同的选项值列表。我试图得到的是,如果在任何一个字段中选择一个值,它不应该显示在另一个字段中。下面是一个示例代码。例如,如果我有四个选择字段,如果我在第一个字段上选择"a",则值"a"不应出现在下一个选择字段中。与"b"、"c"和"d"的其他值相同。我正在尝试使用java脚本。我正处于学习阶段。帮助将不胜感激。谢谢
<select name='list' id='list_1'>
<option value='a'>a</option>
<option value='b'>b</option>
<option value='c'>c</option>
<option value='d'>d</option>
</select>
<select name='list' id='list_2'>
<option value='b'>b</option>
<option value='c'>c</option>
<option value='d'>d</option>
</select>
<select name='list' id='list_3'>
<option value='c'>c</option>
<option value='d'>d</option>
</select>
<select name='list' id='list_4'>
<option value='d'>d</option>
</select>
试试我写的这段代码。希望应该有所帮助
<select>
<option value="0"> </option>
<option value="1">a</option>
<option value="2">b</option>
<option value="3">c</option>
</select>
<select>
<option value="0"> </option>
<option value="1">a</option>
<option value="2">b</option>
<option value="3">c</option>
</select>
<select>
<option value="0"> </option>
<option value="1">a</option>
<option value="2">b</option>
<option value="3">c</option>
</select>
$(document).on('change', 'select', function() {
$(this).find('option:selected').addClass('keepit');
$('option[value="' + this.value + '"]:not( .keepit)').remove();
});
https://jsfiddle.net/av46dbo1/
由于您不想销毁数据,因此需要隐藏选项。这很棘手,因为您需要组合多个状态。
你可以进行几个IF比较,为每个组和选项硬编码一个组合表(yuck),或者使用大量的JS来解决这个问题,但我认为CSS更好。
实现此目的的一种简单方法是使用CSS;单个元素上的多个类,将许多状态转换为可以立即和通用应用的规则(无需硬编码ID或名称)。
<select name='list' id='list_1'>
<option value='a'>a</option> <option value='b'>b</option>
<option value='c'>c</option> <option value='d'>d</option>
</select>
<select name='list' id='list_2'>
<option value='a'>a</option> <option value='b'>b</option>
<option value='c'>c</option> <option value='d'>d</option>
</select>
<select name='list' id='list_3'>
<option value='a'>a</option> <option value='b'>b</option>
<option value='c'>c</option> <option value='d'>d</option>
</select>
<select name='list' id='list_4'>
<option value='a'>a</option> <option value='b'>b</option>
<option value='c'>c</option> <option value='d'>d</option>
</select>
<script src='//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js'></script>
<script>
var combos=[], // store the css we need to define hide/show rules
classes= new Array($("select").length); //a place to store many states
$("select").each(function(i,e){ // for every drop down,
$(this).change(function(){ // when it changes:
classes[i]=this.value; // update array with changed value in right slot
document.body.className=classes.join(" "); // update body class with array
});
});
$("select option[value]").each(function(n, a){ // make css to hide each option if body has the same class:
combos.push( "body."+a.value+" option[value='"+a.value+"'] ");
});
//append the dynamic CSS to the head:
$("head").append("<style> "+combos+"{ display: none; }</style>");
</script>
在线演示:http://pagedemos.com/pe2uf5vkx9vh/
如果要将此功能限制为某些下拉列表,请为它们提供一个类,例如 <select class=hider
,并在上面的代码中将$("select
更改为$("select.hider
。
如果你有带空格的值,你将需要比类更漂亮的CSS选择器,比如data-state="|a b|hello world|honda crv|"
属性,你可以用部分属性选择器(body[data-state*='|hello world|']...
)来分隔和命中,但同样的模式可以处理许多更复杂的状态。
小提琴
$(function(){
$('#list_1').change(function(){
var valueToRemove=$(this).val();
$('select').not('#list_1').each(function(){
var currentId=$(this).prop('id');
$("#"+currentId+" option[value="+valueToRemove+"]").remove();
})
})
})
相关文章:
- 基于类似索引的queryString的Id选择器
- 哪个更快?按 ID 选择,或按索引选择
- 获取 HTML 5 音频控制文件位置并在不使用 id 选择器的情况下更新 src
- Jquery按id选择变量
- 使 ajax 请求和成功数据显示在 id <选择>选择>部分中
- 如何在jQuery的.on()方法中动态更新按钮的ID选择器
- Mootools提交表单仅在通过ID选择表单时有效
- 不能同时通过类和数字 ID 选择 jquery 元素
- Jquery语法错误,id选择器上的表达式无法识别
- JavaScript id 选择器不起作用?不知道出了什么问题
- 将 ID 选择器注入样式
- 如何使用 JQuery 按类和 id 选择非父元素
- Jquery id 选择器变量无法绑定到 onchange
- 如何使用子元素的 ID 选择父元素的第一个子元素
- jQuery ID 选择器仅适用于第一个元素
- JavaScript 将 body_0$ 添加到 ID 选择器中
- 使用隐藏字段 ID 选择器加载另一个字段中的文本
- 如何使用带有值的 ID 选择选项到另一个动态选择选项值
- jquery id 选择器的问题
- jQuery id 选择器在