При работе со входом было обнаружено следующее поведение. Когда метка прикреплена к входу с атрибутом for
, произойдут два события щелчка. Может кто-нибудь объяснить, пожалуйста, поведение этой "аномалии".
И если есть способ предотвратить щелчок на входе, если щелкнуть только метку, конечно, кроме удаления атрибута for
.
document.addEventListener(`click`, onClick)
var counter = 0;
function onClick(event) {
++counter
console.log(counter)
}
label {
display: block;
background-color: lightgrey;
margin: 5px 0 5px;
}
<input id='input'>
<label for='input'>I belong to input</label>
<label>I belong to no one</label>
4 ответа
Клик обрабатывается для обоих элементов.
document.addEventListener(`click`, onClick)
var counter = 0;
function onClick(event) {
event.preventDefault();
++counter
console.log(counter)
}
Метка является вложенным элементом, каждый элемент вызывает событие.
На вопрос о том, как его предотвратить, уже есть ответ [здесь] (jQuery Клик срабатывает дважды при нажатии на ярлык)
Первый щелчок связан с меткой, второй - с соответствующим вводом. Как вы можете видеть, после нажатия на метку фокус устанавливается на входе. Если вы удалите ввод, второй щелчок не будет срабатывать. Это нормальное поведение браузера.
Вы можете предотвратить это с помощью event.preventDefault();
.
document.addEventListener(`click`, onClick)
var counter = 0;
function onClick(event) {
event.preventDefault();
++counter;
console.log(counter);
}
label {
display: block;
background-color: lightgrey;
margin: 5px 0 5px;
}
<input id='input'>
<label for='input'>I belong to input</label>
<label>I belong to no one</label>
Вам нужно использовать event.preventDefault();
, чтобы запретить click
для следующего элемента, который будет вызывать щелчок по умолчанию, который является элементом input
в вашем случае. Но обратите внимание, что это предотвратит щелчок для всех элементов в цепочке, что в конечном итоге заблокирует цепочку click
, которая может потребоваться для других элементов.
document.addEventListener(`click`, onClick)
var counter = 0;
function onClick(event) {
event.preventDefault();
++counter
console.log(counter)
}
label {
display: block;
background-color: lightgrey;
margin: 5px 0 5px;
}
<input id='input'>
<label for='input'>I belong to input</label>
<label>I belong to no one</label>
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.