У меня это прямо сейчас:
<input type="text" placeholder="Paste text" onPaste="alert(this.value);">
Это делает работу с infact, за исключением того, что она возвращает пустое окно предупреждения. Я не ценю. Помощь?
У меня это прямо сейчас:
<input type="text" placeholder="Paste text" onPaste="alert(this.value);">
Это делает работу с infact, за исключением того, что она возвращает пустое окно предупреждения. Я не ценю. Помощь?
Событие 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.
Вы также можете использовать вызов функции внутри вашего события onpaste
, проходящего this
, в качестве параметра, чтобы предотвратить слишком много смешивания HTML с JS.:)
И здесь функция легче читать и которую вы можете использовать в нескольких входах:
function pasted(element) {
setTimeout(function(){
alert(element.value);
}, 0); //or 4
}
который можно вызвать простым onPaste="pasted(this)"
для любого ввода.
Это связано с тем, что событие onpaste
срабатывает до, содержимое вставляется в элемент (ссылка) так что его еще нет в то время, когда вы его обрабатываете.
Современные браузеры поддерживают методы получения данных буфера обмена внутри обработчика событий. Обратитесь к JavaScript, чтобы получить данные буфера обмена при вставке (кросс-браузер) для попыток решения нескольких браузеров.
Кроме того, вы всегда можете обойти свою проблему, просто запустив таймер в функции обработчика событий (должно быть достаточно 10 мс), которое позже проверит ваше входное значение.