Это происходит потому, что это поведение браузера по умолчанию. Вы можете связать флажок с меткой двумя способами:
Флажок внутри метки, например:
<label><input type="checkbox" id="box"/>Test</label>
Или с помощью for
атрибут вроде:
<label for="box">Test</label><input type="checkbox" id="box"/>
В обоих случаях флажок будет автоматически проверен / не отмечен при нажатии ярлыка. Это также упоминается в w3.org .
Итак, чтобы предотвратить действие по умолчанию, вы должны использовать event.preventDefault()
вместо внутри label
click как:
$(function() {
$('#box').on('click', checkbox);
$('label').on('click', label);
})
function label(e) {
e.preventDefault();
console.log('label');
}
function checkbox(e) {
e.stopPropagation();
console.log("checkbox");
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for="box">
<input type="checkbox" id="box"/>Test
</label>
Если вы ищете более простое решение, вы можете отделить метку и флажок и удалить атрибут for
из метки, например:
<div class="wrapper">
<input type="checkbox" id="box"/>
<label>Test</label>
</div>