Checkbox 快速點擊兩次(未勾選→勾選→未勾選)時,雖然視覺狀態回到未勾選,但 onclick 卻觸發了兩次。原因是 onclick 針對「滑鼠按下並釋放」動作觸發,與勾選狀態無關;快速雙擊產生兩次獨立點擊事件。
<input type="checkbox" id="chk" onchange="handleChange(this)">
<script>
function handleChange(cb) {
if (cb.checked) {
// 僅在真正變為勾選時執行
}
}
</script>
onchange 僅在 checked 屬性**實際改變**時觸發(由 false→true 或 true→false),完美符合「使用者確認勾選/取消」的業務語意,且不受點擊速度影響。
$('#chk').on('change', function() {
if (this.checked) { /* ... */ }
});
表單元素(checkbox、radio、select)的狀態變更監聽,**一律優先使用 change 事件**,避免 click 帶來的重複觸發與狀態不同步問題。