Получить нажатие клавиш с помощью события буфера обмена в Javascript?Jquery

Программирование на jquery
Ответить
Гость
 Получить нажатие клавиш с помощью события буфера обмена в Javascript?

Сообщение Гость »

У меня есть текстовая область, куда пользователи могут вставлять текст из буфера обмена.
Вставленный текст clipboarddata.getData('text') изменяется.Однако мне нужен переключатель, который при нажатии CTRL SHIFT V вместо CTRL < kbd>V вставленный текст не изменяется.
Я пытался перехватить клавишу Shift с помощью клавиши Down/Keyup:

Код: Выделить всё

$('textarea').on('keyup', function(e)
{
shiftkey_down = e.shiftKey;
});
а затем попробуйте прочитать логическую переменную в обработчике события вставки:

Код: Выделить всё

$('textarea').on('paste', function(e)
{
if (shiftkey_down)
{
// ...
}
});
но событие вставки происходит после нажатия клавиши и нажатия клавиши. Поэтому я не могу прочитать, какая клавиша была нажата. А сдвигkey_down всегда имеет значение false внутри обработчика вставки.
Как правильно с этим справиться?
Единственная идея, которая у меня возникла, - сохранить последнюю нажатую комбинацию клавиш внутри события нажатия клавиши, а затем проверить последнюю нажатую комбинацию внутри обработчика вставки. Но, похоже, это тоже не работает.

Обновление:
Я пробовал использовать небольшой таймаут, чтобы логическая переменная keydown не перезаписывалась немедленно:

Код: Выделить всё

var shiftkey_paste = false;

$('textarea').on('keydown', function(e)
{
if (!shiftkey_paste)
{
shiftkey_paste = e.shiftKey && e.ctrlKey;

console.log('> '+shiftkey_paste);

setTimeout( function()
{
// set false again after timeout so paste event has chance to pick up a true value
shiftkey_paste = false;
}, 10);
}

console.log('>> ' + shiftkey_paste);
});
И внутри обработчика вставки я печатаю значение с помощью console.log('>>> ' +shiftkey_paste);.
Результат:

Код: Выделить всё

> false
>> false
> true
>> true
> false
>> false
>>> false
Также неверно, хотя тайм-аут должен был помочь.

Обновление 2:
✔️ Ого, это работает с таймаутом 100мс вместо 10мс (!)

Если кто-то найдет лучшее решение, опубликуйте свой ответ.

Подробнее здесь: https://stackoverflow.com/questions/781 ... javascript
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Jquery»