jQuery обнаруживает вставку события в любом месте на странице и "перенаправляет" его в Textarea
Я стремлюсь создать "простой способ вставки", при котором пользователь может нажать ctrl-v в любом месте страницы, чтобы вставить свои данные буфера обмена в текстовую область. Я хочу, чтобы они могли вставлять текст в текстовую область без сосредоточения текстовой области.
Я знаю, что могу использовать этот код для обнаружения события вставки:
$('html').bind('paste', function(e) {
});
Но я не знаю, как получить данные из буфера обмена и "переместить" их в текстовую область, или, если это вообще возможно (что с ограничениями доступа к буферу обмена пользователя).
3 ответа
Это невозможно в Firefox. В IE, Safari и Chrome вы можете сделать следующее:
$('html').bind('paste', function(e) {
e.preventDefault();
if(e.originalEvent.clipboardData){
var text = e.originalEvent.clipboardData.getData("text/plain");
alert(text);
}
});
Невозможно получить доступ к буферу копирования из JavaScript (или Flash, хотя есть проект Flash под названием ZeroClipboard, который может добавить текст в буфер копирования, который он не может прочитать обратно).
Можно сделать то, что вы пытаетесь в Firefox, захватить Ctrl-V и перенаправить его на ввод текста / текста.
Однако вы не можете сделать это, прослушивая событие onpaste в firefox из-за безопасности, как сказал другой автор, но это возможно, прослушивая событие keydown и фиксируя Ctrl+V.
Во всех браузерах, как правило, вы не можете получить доступ к буферу обмена напрямую (это можно установить с помощью Flash, или я думаю, что в некоторых версиях Internet Explorer это могло быть возможно).
Вы можете прослушать событие нажатия клавиш в окне и проверить, нажаты ли Ctrl+V.
Затем вы можете сфокусировать ввод / текстовую область, не отменять распространение события, и Firefox с радостью прикрепит текст туда, куда вы хотите, чтобы он шел.
Затем вы можете прослушать входные события onpaste или onchange для дальнейшей обработки текста.
HTML:
<textarea id='redirect_ta'></textarea>
JS:
$(window).keydown(function(event) {
if(event.ctrlKey && event.keyCode == 0x56) {
$('#redirect_ta').focus();
}
});
Вот JSFiddle, иллюстрирующий это:
Работает на Firefox, Chrome и Internet Explorer.