11 июн. 2012 г., 00:47 отJake

Javascript OnPaste

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

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

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

Ответы на вопрос(2)

11 июн. 2012 г., 01:06 отFabrício Matté

onpaste событие происходит доinput& APOS; svalue изменено Вам нужно что-то вродеsetTimeout:

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

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

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

Fiddle

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

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

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

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

Fiddle

23 мая 2017 г., 14:34 отCommunityDmitry Pashkevich

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

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

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

ВАШ ОТВЕТ НА ВОПРОС