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, иллюстрирующий это:

http://jsfiddle.net/DK536/2/

Работает на Firefox, Chrome и Internet Explorer.

Другие вопросы по тегам