Как определить, было ли событие onChange вызвано onPaste
У меня есть функция Javascript, которая связана с событием onChange. Я понимаю, что некоторые браузеры поддерживают onPaste либо на уровне документа, либо на уровне элемента. Есть ли способ определить, было ли событие onChange вызвано "вставкой" - я попытался добавить глобальную переменную, которая устанавливается при запуске onPaste, а затем сбросить его в конце моей процедуры onChange, но нет никакой гарантии, что функция onPaste вызывается перед onChange.
4 ответа
Вы можете использовать onKeyPress/onKeyUp/onKeyDown/onPaste вместо onChange.
Это работало нормально для меня:
<input type="text" onchange="ValueChanged(event, this);" onpaste="this.setAttribute('pasted', '1');"/>
<script type="text/javascript">
function ValueChanged(evt, sender) {
var blnCameFromPaste = ((sender.getAttribute("pasted") || "") == "1");
if (blnCameFromPaste)
alert("changed by paste");
else
alert("changed without paste");
sender.setAttribute("pasted", "0")
}
</script>
Каждый раз, когда вы видите событие onchange, сравнивайте текущую длину значения поля с предыдущей длиной, а текущее время с предыдущим временем. Если символы вводились быстрее, чем кто-либо мог предположить, они должны быть вставлены.
Я не думаю, что вы сможете сделать это повсеместно. Смотрите текущее состояние тестирования этой функции.
Одним из способов обнаружения вставки может быть подсчет времени между "нажатиями клавиш", когда поле имеет фокус.