Вставленный текст clipboarddata.getData('text') изменяется.Однако мне нужен переключатель, который при нажатии CTRL SHIFT V вместо CTRL V вставленный текст не изменяется.
Я пытался перехватить клавишу Shift с помощью клавиши Down/Keyup:
Код: Выделить всё
$('textarea').on('keyup', function(e)
{
shiftkey_down = e.shiftKey;
});
Код: Выделить всё
$('textarea').on('paste', function(e)
{
if (shiftkey_down)
{
// ...
}
});
Как правильно с этим справиться?
Единственная идея, которая у меня возникла, - сохранить последнюю нажатую комбинацию клавиш внутри события нажатия клавиши, а затем проверить последнюю нажатую комбинацию внутри обработчика вставки. Но, похоже, это тоже не работает.
Обновление:
Я пробовал использовать небольшой таймаут, чтобы логическая переменная 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);
});
Результат:
Код: Выделить всё
> false
>> false
> true
>> true
> false
>> false
>>> false
Обновление 2:
Обновление 3:
Я обнаружил, что setTimeout срабатывает несколько раз, когда пользователь удерживает нажатой клавишу CTRL SHIFT и, таким образом, устанавливает для логического значения значение false, даже если клавиши удерживаются нажатыми. Решение состоит в том, чтобы очистить settimeout следующим образом:
Код: Выделить всё
var shiftkey_paste = false;
var shiftkey_timeout = null;
$('textarea').on('keydown', function(e)
{
if (!shiftkey_paste)
{
clearTimeout(shiftkey_timeout);
shiftkey_paste = e.shiftKey && e.ctrlKey;
console.log('> ' + shiftkey_paste);
shiftkey_timeout = setTimeout( function()
{
// set false again after timeout so paste event has chance to pick up a true value
shiftkey_paste = false;
shiftkey_timeout = null;
},
500); // 500 ms for timeout to set back boolean to false
}
console.log('>> ' + shiftkey_paste);
});
Подробнее здесь: https://stackoverflow.com/questions/781 ... oard-event
Мобильная версия