Autor Zpráva
Tomášeek
Profil
Ahoj,

snažím se přijít na to, jak detekovat stisk klávesové zkratky Ctrl+V (resp. Cmd+V na MacOS) a následně provést nějakou akci. Tou akcí myslím focusnutí textového inputu a vložení do něj obsahu ze schránky.

Našel jsem zatím jen scripty, které umožní odchytnout tuto klávesovou zkratku, pokud je input již aktivní, např. How to detect Ctrl+V, Ctrl+C using JavaScript? (ale i na mnoha jiných místech). Navázat onpaste, resp. .on('paste') na $(document) či něco jiného mimo input se mi nepodařilo. Dá se to?

Děkuji.
Rararach
Profil *
Do čeho jiného chceš v HTML něco pastnout, než do input?

Tady je taky něco o onpaste: www.w3schools.com/jsref/event_onpaste.asp


i toto je možnost?

www.w3schools.com/tags/tryit.asp?filename=tryhtml5_ev_onpaste_p
Tomášeek
Profil
Rararach:
Když nevím, tak se raději nevyjadřuji. Myslím, že jsem popsal, co chci udělat, vyjadřuj se prosím k tématu, víš-li. Nevíš-li, raději mlč.
Chamurappi
Profil
Reaguji na Tomáškaa:
Obávám se, že jediné řešení bude dát rovnou při načtení (nebo při prvním stisku Ctrl/Shift/Cmd) focus nějakému editovatelnému prvku… což pak znamená, že nebudou fungovat jakékoliv klávesové zkratky, které by měly vliv na stránku a které v editovatelném prvku budou vnímané jinak (třeba šipky nahoru/dolu, mezerník). Třeba by nějak šlo událost na focusnutém prvku zachytit, prozkoumat, zda to nemůže být zkratka pro vložení (což může být mimochodem i Shift+Insert), a pokud není, tak ji uměle vyvolat na window.
Tomášeek
Profil
Chamurappi:
což může být mimochodem i Shift+Insert
To zde nehrozí, držme se jen Ctrl+V :-)

že jediné řešení bude dát rovnou při načtení ([...]) focus nějakému editovatelnému prvku
To možné nebude, do doby, než chci něco psát/vkládat, se potřebuji šipkami volně pohybovat po "tabulce" mezi buňkami (odchytávám stisk šipky a vizuálně odlišuji "aktivní" buňku tabulky).

... nebo při prvním stisku Ctrl/Shift/Cmd ...
To by šlo. Zkusím zapracovat :-)

Jen tak mimochodem, jelikož nemám kde odzkoušet, jak efektivně a nejjednodušeji odchytnout v JS Ctrl/Cmd? Někde jsem četl, že by to mohlo být ctrlKey, nebo musím přes číselný kód klávesy? Jaké to eventuálně jsou (Cmd na Macu si zjistím, resp. znám, Ctrl na Win bohužel nikoliv).

Děkuji za reakci, i když jsi mě moc nepotěšil... myslel jsem, že půjde detekovat "paste" i v momentě, kdy vlastně není kam pastnout. To evidentně nejde, alespoň ne nijak jednoduše (představoval jsem si to asi takhle: Ctrl+V > "Ha, snaha o paste, mám kam pastnout? Ano > Pastnu. Ne > Ignoruji.")
Keeehi
Profil
Nějak to určitě jde. Slack mi ctrl+V odchytí i když není aktivní pole pro chat. Netuším, jak to tam mají vyřešené, to si budeš muset zjistit sám.
xROAL
Profil
Minimálne v Chrome (na Win) úplne bez problému funguje a odchytí paste všade:
window.addEventListener('paste', e => console.log(e));

Podľa cainuse.com toto však umožňuje len Chrome a Opera (ak správne chápem).
IE, Edge, Firefox a Safari nevyvolajú udalosť paste bez toho, aby bol označený nejaký editovateľný prvok.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: