#javascript #microsoft-edge
#javascript #microsoft-edge
Вопрос:
У меня есть простое поле ввода html
<input id="query" type="text" oninput="QueryInput(this.value)" onchange="QueryChange(this.value)">
и я пробовал разные способы захвата события clear ( x
появляется справа от текстового поля, когда я вхожу с помощью мыши, чтобы ввести что-то там) в Edge (моя версия — Microsoft Edge 44.18362.449.0).
<p id="demo_typed"></p>
<p id="demo_typing"></p>
<p id="demo_oninput"></p>
<p id="demo_onchange"></p>
<script>
function QueryChange(query) {
document.getElementById("demo_onchange").innerHTML = `You changed to ${query}`;
}
function QueryInput(query) {
document.getElementById("demo_oninput").innerHTML = `You inputted ${query}`;
}
document.getElementById("query").addEventListener('input', (event) => {
document.getElementById("demo_typing").innerHTML = `You are typing ${event.target.value}`;
});
document.getElementById("query").addEventListener('change', (event) => {
document.getElementById("demo_typed").innerHTML = `You typed ${event.target.value}`;
});
</script>
но ни один из них не реагирует на событие очистки (за исключением изменения, которое может быть вызвано после него, когда мышь покидает ввод): разве это не выполнимо?
Вот доступный для выполнения фрагмент:
function QueryChange(query) {
document.getElementById("demo_onchange").innerHTML = `You changed to ${query}`;
}
function QueryInput(query) {
document.getElementById("demo_oninput").innerHTML = `You inputted ${query}`;
}
document.getElementById("query").addEventListener('input', (event) => {
document.getElementById("demo_typing").innerHTML = `You are typing ${event.target.value}`;
});
document.getElementById("query").addEventListener('change', (event) => {
document.getElementById("demo_typed").innerHTML = `You typed ${event.target.value}`;
});
<p><strong>Note:</strong> The question is specific to Legacy Edge, not the newer Chromium-based Edge.</p>
<input id="query" type="text" oninput="QueryInput(this.value)" onchange="QueryChange(this.value)">
<p id="demo_typed"></p>
<p id="demo_typing"></p>
<p id="demo_oninput"></p>
<p id="demo_onchange"></p>
Комментарии:
1.Кстати, также Internet Explorer (например, версия 1909 в Windows 10) имеет этот «x» для очистки ввода, но слегка измененная версия для IE работает, и оба
input
addEventListener
иoninput
реагируют на событие очистки.2. Просто из любопытства, зачем вам поддерживать устаревший Edge? Пользователи должны очень стараться не переходить на Chromium Edge, поэтому в дикой природе его пользователей практически не должно быть…
3. @T.J.Crowder это версия, которую я нахожу установленной на моем корпоративном ноутбуке (это довольно крупная компания в Италии с большим отделом ИКТ. Честно говоря, я не знаю о версии, которую они устанавливают в офисах за рубежом). Итак, в моей компании, я думаю, много пользователей интрасети. Но хорошо, это не настоящая проблема, мы можем использовать Chrome (или firefox), просто чтобы знать.
4. Спасибо! Мне просто любопытно, это не меняет и не отменяет вопрос. (Кстати, я думаю, что я где-то видел этот вопрос раньше, но я не нахожу его здесь, на SO. К сожалению, я думаю, что ответ был «нет, события нет».)
5. @T.J.Crowder Они подтвердили, что мы выпускаем обновление для всех наших пользователей в ближайшие месяцы, так что все в порядке 😉
Ответ №1:
Предполагая, что
нет, события нет.
ответ, как предложил Т.Дж. Краудер в своем комментарии, лучший совет, который я нашел, — скрыть кнопку очистки края с помощью стиля
<style>
input::-ms-clear {
display: none
}
</style>
и, возможно, добавьте мою пользовательскую кнопку очистки.
Например, если ввод заключен в
<form id="myForm" onsubmit="event.preventDefault();">
очистка может быть реализована с помощью сброса формы и выполнения всех необходимых действий по сбросу
function clear_input() {
document.getElementById("myForm").reset();
document.getElementById("demo_typed").innerHTML = '';
document.getElementById("demo_typing").innerHTML = '';
document.getElementById("demo_oninput").innerHTML = '';
document.getElementById("demo_onchange").innerHTML = '';
}
document.getElementById("myBtnClear").addEventListener("click", function() {
clear_input();
});
Альтернативное решение, без скрытия четкого края
В противном случае, как предложено в репозитории Angular github и адаптировано мной здесь для ванильного Javascript, можно подписаться на mouseup
событие в качестве обходного пути и перехватить очистку края следующим образом:
document.getElementById("query").addEventListener('mouseup', (event) => {
beforeVal = event.target.value;
setTimeout(() => {
afterVal =event.target.value;
if (beforeVal !== '' amp;amp; afterVal === '') {
clear_input();
}
}, 1);
});