Как определить, было ли событие onChange вызвано onPaste - PullRequest
3 голосов
/ 04 ноября 2010

У меня есть функция Javascript, связанная с событием onChange.Я понимаю, что некоторые браузеры поддерживают onPaste либо на уровне документа, либо на уровне элемента.Есть ли способ определить, было ли событие onChange вызвано «вставкой» - я попытался добавить глобальную переменную, которая устанавливается при запуске onPaste, а затем сбросить его в конце моей процедуры onChange, но нет никакой гарантии, чтофункция onPaste вызывается перед onChange.

Ответы [ 4 ]

1 голос
/ 04 ноября 2010

Для меня это работало нормально:

<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>
1 голос
/ 08 ноября 2010

Вы можете использовать onKeyPress / onKeyUp / onKeyDown / onPaste вместо onChange.

0 голосов
/ 07 декабря 2010

Каждый раз, когда вы видите событие onchange, сравнивайте текущую длину значения поля с предыдущей длиной и текущее время с предыдущим временем.Если символы вводились быстрее, чем кто-либо мог предположить, они должны быть вставлены.

0 голосов
/ 04 ноября 2010

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

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

...