javascript - 使用复选框禁用动态输入
问题描述
我有一个复选框/选择,并希望在选中复选框时启用选择,并在未选中时禁用选择。
<p>
<input id="option[21]" type="checkbox" name="checkbox[21]">
<select id="option[21]" name="select[21]" disabled><option value="">-</option><option value="1">Today</option><option value="2">Tomorrow</option></select>
</p>
<p>
<input id="option[22]" type="checkbox" name="checkbox[22]">
<select id="option[22]" name="select[22]" disabled><option value="">-</option><option value="1">Today</option><option value="2">Tomorrow</option></select>
</p>
当我运行我的代码时,它似乎没有正确选择下拉列表:
$(document).on('change', 'input[type=checkbox]', function(event) {
var selectId = event.target.id;
console.log(selectId);
if ($(this).is(':checked')) {
$(selectId).removeAttr('disabled');
} else {
$(selectId).prop( "disabled", true );
}
});
解决方案
您的文档中有重复的 id,这在 HTML5(或任何版本的 AFAIK)中是不允许的,并且行为不是规范的,但通常是这样,document.getElementById
并且document.querySelector
会返回第一个元素。
相反,您可以只使用 jQuery.siblings
方法来遍历相对于单击元素的 DOM:
$(document).on('change', 'input[type=checkbox]', function(event) {
let $el = $(this);
$el.siblings('select').prop("disabled", !$el.is(':checked'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>
<input id="option[21]" type="checkbox" name="checkbox[21]">
<select name="select[21]" disabled><option value="">-</option><option value="1">Today</option><option value="2">Tomorrow</option></select>
</p>
<p>
<input type="checkbox" id="option[22]" name="checkbox[22]">
<select name="select[22]" disabled><option value="">-</option><option value="1">Today</option><option value="2">Tomorrow</option></select>
</p>
推荐阅读
- discord.js - discord.js 从 fs.readdir 中获取数组
- c# - 检索每个用户对特定谷歌文档所做的更改
- angular - 角度代理配置
- php - 未在 Safari 13 中为基域设置 Laravel 6 会话 cookie
- node.js - 使用 Express 将上传的文件作为流获取
- r - 如何在 Case_When 语句中忽略字符串中的转义?
- html - 如何使一个边框不与另一个边框重叠,多选还是单选?
- sql - SQL:尝试将数据插入有关系时出现 KeyError
- sql-server - SQL Select 中的 Concat 字符串
- python - 如何在删除列表中单词之间的连字符时克服不一致