我需要有一个复选框列表,条件是至少必须检查其中的一个。
以下代码会产生该效果。取消复选框的单击事件阻止检查它?
document.querySelector('div').addEventListener('click', function(evt){
if(this.querySelectorAll('input:checked').length == 0)
evt.preventDefault() ;
}) ;
<div>
<input type=checkbox checked>
<input type=checkbox>
<input type=checkbox>
</div>
这很好,不过,我不明白为什么这段代码更有效。
首先,我在点击事件上做了一个.preventDefault()
,只有在检查了没有复选框选中的条件后。因此取消点击事件应该没有什么区别。
其次,即使您尝试使用键盘检查复选框,代码仍然有效,这完全是奇怪的,因为我只取消单击事件。
请解释为什么代码的工作方式。
有趣的,..我假设'preventDefault'有一种回滚逻辑的形式。 – Keith