Как определить, было ли событие 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, сравнивайте текущую длину значения поля с предыдущей длиной, а текущее время с предыдущим временем. Если символы вводились быстрее, чем кто-либо мог предположить, они должны быть вставлены.

Я не думаю, что вы сможете сделать это повсеместно. Смотрите текущее состояние тестирования этой функции.

Одним из способов обнаружения вставки может быть подсчет времени между "нажатиями клавиш", когда поле имеет фокус.

Другие вопросы по тегам