- 标签的
for
应与id
匹配,而不是输入的name
- 不要过度使用数字ID,在某些时候,您的ID很有可能会重复和冲突.相反,删除
id
和for
属性并将您的输入包装到<label>
中
- 使用jQuery的"Change"事件函数回调
- 使用
.prop()
可获取所需的属性值
$("#categoryFilter").on("change", ":checkbox", function() {
const name = $(this).prop("name");
const value = $(this).prop("value");
const checked = $(this).prop("checked");
console.log(`${name} ${value} ${checked}`);
});
<div class="filter-box" id="categoryFilter">
<label>
<input type="checkbox" name="Education" value="3">
Education
</label>
<label>
<input type="checkbox" name="Employment" value="12">
Employment
</label>
<label>
<input type="checkbox" name="Goods and Services" value="5">
Goods and Services
</label>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
随着IE浏览器的消亡,以及长青浏览器跟上最新的ECMAScript好东西的步伐,jQuery现在已经不是必要的了.没有像jQuery这样的库开销的纯JavaScript方法将是:
document.querySelector("#categoryFilter").addEventListener("change", (evt) => {
const el = evt.target.closest("[type=checkbox]");
if ( !el ) return; // Not a checkbox
console.log(`${el.name} ${el.value} ${el.checked}`);
});
<div class="filter-box" id="categoryFilter">
<label>
<input type="checkbox" name="Education" value="3">
Education
</label>
<label>
<input type="checkbox" name="Employment" value="12">
Employment
</label>
<label>
<input type="checkbox" name="Goods and Services" value="5">
Goods and Services
</label>
</div>
还要注意的是,上面的纯JavaScript示例使用Event delegation,类似于您在jQuery中使用$(parent).on("eventName", "dynamicChild", fn)
所做的操作--这甚至适用于动态创建的CheckBox元素.