Подтвердить что ты не робот

Javascript OnPaste

У меня это прямо сейчас:

<input type="text" placeholder="Paste text" onPaste="alert(this.value);">

Это делает работу с infact, за исключением того, что она возвращает пустое окно предупреждения. Я не ценю. Помощь?

4b9b3361

Ответ 1

Событие onpaste срабатывает до изменения input value. Вам нужно что-то вроде setTimeout:

<input type="text" placeholder="Paste text" onPaste="var e=this; setTimeout(function(){alert(e.value);}, 4);">​

Я сохраняю ссылку на this внутри глобального var, поскольку this недоступен внутри области функции таймаута, которая привязана к объекту окна.

Я использую 4 миллисекунды в качестве таймаута, так как это минимальный допустимый интервал/тайм-аут в спецификации HTML5. Изменить: Как отмечено в комментариях, вы также можете использовать 0 miliseconds как timeOut, который автоматически пересчитывается на 4. тесты jsPerf.

Fiddle

Вы также можете использовать вызов функции внутри вашего события onpaste, проходящего this, в качестве параметра, чтобы предотвратить слишком много смешивания HTML с JS.:)

И здесь функция легче читать и которую вы можете использовать в нескольких входах:

function pasted(element) {
    setTimeout(function(){
        alert(element.value);
    }, 0); //or 4
}​

который можно вызвать простым onPaste="pasted(this)" для любого ввода.

Fiddle

Ответ 2

Это связано с тем, что событие onpaste срабатывает до, содержимое вставляется в элемент (ссылка) так что его еще нет в то время, когда вы его обрабатываете.

Современные браузеры поддерживают методы получения данных буфера обмена внутри обработчика событий. Обратитесь к JavaScript, чтобы получить данные буфера обмена при вставке (кросс-браузер) для попыток решения нескольких браузеров.

Кроме того, вы всегда можете обойти свою проблему, просто запустив таймер в функции обработчика событий (должно быть достаточно 10 мс), которое позже проверит ваше входное значение.