Der eingefügte Text clipboarddata.getData('text') wird geändert.Allerdings benötige ich einen Schalter, der beim Drücken von STRG UMSCHALT V anstelle von STRG aktiviert V Der eingefügte Text wird nicht geändert.
Ich habe versucht, die Umschalttaste mit keydown/keyup:
zu fangen
Code: Select all
$('textarea').on('keyup', function(e)
{
shiftkey_down = e.shiftKey;
});
Code: Select all
$('textarea').on('paste', function(e)
{
if (shiftkey_down)
{
// ...
}
});
Was wäre der richtige Weg, damit umzugehen?
Die einzige Idee, die ich hatte, ist, die zuletzt gedrückte Tastenkombination im Keydown-Ereignis zu speichern und dann die zuletzt gedrückte Tastenkombination im Paste-Handler zu überprüfen. Aber es scheint auch nicht zu funktionieren.
Update:
Ich habe es versucht um eine kleine Zeitüberschreitung zu verwenden, damit die boolesche Variable „keydown“ nicht sofort überschrieben wird:
Code: Select all
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);
});
Ergebnis:
Code: Select all
> false
>> false
> true
>> true
> false
>> false
>>> false
Update 2:
Update 3:
Ich habe herausgefunden, dass setTimeout mehrmals ausgelöst wird, wenn der Benutzer STRG UMSCHALT gedrückt hält und somit den booleschen Wert auf „false“ setzt, obwohl die Tasten gedrückt gehalten werden. Die Lösung besteht darin, den Settimeout wie folgt zu löschen:
Code: Select all
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);
});