选择下拉列表,如果下拉列表的选定值不为空,则自动选中该复选框
Select dropdown and auto check the checkbox if the selected value of dropdown is not empty
当人们选择下拉列表时,如果下拉列表的选定值不为空,则将自动选中复选框。但是我遇到了"sel[i]未定义"错误。
Javascript部分:
var chk = document.getElementsByTagName("input");
var sel = document.getElementsByTagName("select");
for (var i=0; i< sel.length; i++) {
sel[i].onchange = function(){
if (sel[i].value !== ''){
chk[i].checked = true;
}
else{
chk[i].checked = false;
}
};
}
网页部分:
<form name="form1">
<div class="container">
<input id='checkbox_id1' name='checkbox_id1' type='checkbox' value='1' /></label>
Select
<label>
<select id="select_id1" name="select">
<option value=""></option>
<option value="111">111</option>
<option value="222">222</option>
</select>
</label>
<hr>
<input id='checkbox_id2' name='checkbox_id1' type='checkbox' value='1' /></label>
Select
<label>
<select id="select_id2" name="select">
<option value=""></option>
<option value="111">111</option>
<option value="222">222</option>
</select>
</label>
</div>
JSFIDDLE: http://jsfiddle.net/planetoid/GwEuu/
你的 i
值不是你想象的那样,因为 for
循环在实际调用任何事件处理程序之前已经运行完成,因此i
是for
循环末尾的值。
要为每个事件处理程序捕获适当的 i
值,可以使用如下所示的自执行函数,该函数在每个特定事件处理程序的闭包中捕获它:
var chk = document.getElementsByTagName("input");
var sel = document.getElementsByTagName("select");
for (var i = 0; i < sel.length; i++) {
(function(i) {
sel[i].onchange = function(){
chk[i].checked = sel[i].value !== '';
}
})(i);
}
工作演示:http://jsfiddle.net/jfriend00/yds6w/
仅供参考,我还简化了.checked
分配代码。
但是,在稍微看了一下你的代码之后,我相信这可能是一种更好的实现它的方法,不需要自执行函数。 这不依赖于复选框和输入标签的完美并行数组,而是将 select 的 ID 转换为相应复选框的 ID,并使用 this
来引用 select 元素。 因此,事件处理程序中不使用i
。
var sel = document.getElementsByTagName("select");
for (var i = 0; i < sel.length; i++) {
sel[i].onchange = function(){
var checkboxId = this.id.replace("select_", "checkbox_");
document.getElementById(checkboxId).checked = this.value !== '';
}
}
工作演示:http://jsfiddle.net/jfriend00/g3UQG/
我看到jfriend00击败了我,但你也可以使用这种语法来达到相同的效果(我还缩短了内部代码):
var chk = document.getElementsByTagName("input"),
sel = document.getElementsByTagName("select");
for (var i=0; i< sel.length; i++) {
sel[i].onchange = (function (i) {
return function(){
chk[i].checked = sel[i].value !== '';
};
}(i));
}
相关文章:
- HTML 下拉列表所选值
- 如何通过单击唯一按钮保存下拉菜单/复选框菜单选项和占位符值
- 下拉列表单选取消选择
- 待办事项列表复选框编号逻辑
- 语义 UI 下拉列表所选文本和值似乎很奇怪
- 选中下拉 AND 复选框中的特定值时如何切换文本
- 使用“下拉列表多选复选框”(jquery)创建动态表
- 下拉列表和文本框逻辑
- 基于下拉列表和文本框访问带字符串的变量
- 下拉列表和文本框上的googlemapapi代码
- 有没有一种方法可以允许只有在输入了数据的情况下才标记复选框
- PHP根据下拉列表在文本框中获取子数组的值
- 在jquery中未激发列表复选框更改事件
- 如何在未选中子复选框的情况下选中主复选框
- 在这种情况下如何处理复选框
- 下拉与复选框不起作用
- 默认情况下取消选中复选框
- Javascript /jquery-如何确定列表/复选框是否允许选择多个值
- 如何根据javascript中选择单选按钮的下拉列表在文本框中显示相应的值
- 通过下拉更改复选框颜色