Ответ 1
Хотя это выглядит как ошибка (спасибо за регистрацию!), Обычно событие щелчка отправляется на самый глубокий элемент, который наблюдал события mousedown
и mouseup
. Таким образом, вы можете аналогичным образом "прервать" событие щелчка, переместив текстовое поле на :focus
(например, position:absolute; top: xxx
) - это потому, что порядок событий mousedown-> focus (обновляет веб-страницу) → mouseup-> нажмите кнопку.
Свойство resize
управляет "анонимным контентом", который невидим для веб-страницы, но используется браузером для реализации дополнительного пользовательского интерфейса для удобства пользователя. Я предполагаю, что изменения в этом контенте мешают обнаружению событий click
, но, не глядя на это в отладочной сборке, невозможно сказать наверняка.
function logEvent(ev) {console.log(ev.type, window.getComputedStyle(document.querySelector("textarea")).resize)}
document.querySelector("textarea").addEventListener("mousedown", logEvent, false);
document.querySelector("textarea").addEventListener("focus", logEvent, false);
document.querySelector("textarea").addEventListener("mouseup", logEvent, false);
document.querySelector("textarea").addEventListener("click", logEvent, true);
textarea:focus{
position:absolute; top: 500px;
/*resize:vertical;*/
}
<textarea>click me</textarea>