我需要有一個複選框列表,條件是至少必須檢查其中的一個。
以下代碼會產生該效果。取消複選框的單擊事件阻止檢查它?
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