Копировать Вставить в JavaScript

Это извечный вопрос, но у меня все еще есть проблемы с ним. Видите ли, я пытаюсь вставить некоторые данные Excel в текстовую область, но глупые браузеры при этом зависают на долгое время из-за бог знает какого "умного" синтаксического анализа, который они делают. Я не могу избавиться от этого (о загрузке файла не может быть и речи, мой босс хочет, чтобы я вставлял строки из Excel в текстовую область).

Хорошей новостью является то, что вставка в стандартное текстовое поле РАБОТАЕТ. Но я не могу заставить их вставить туда. Итак, я пытаюсь поймать событие вставки в текстовой области, а затем перебросить текст в текстовое поле. К сожалению, я остановился на части вставки. Я не могу вставить текст через JS в простое текстовое поле.

Итак, мой вопрос: как вы вставляете текст, как вы вызываете его через JS? Есть некоторые решения, которые работают только в IE, это, конечно, нехорошо ::-).


person Axonn    schedule 26.01.2010    source источник
comment
Обычное текстовое поле быстрее, потому что оно содержит только одну строку.   -  person Josh Stodola    schedule 26.01.2010
comment
Ду конечно. Но он по-прежнему вставляет данные Excel в порядке, разделенные вкладкой.   -  person Axonn    schedule 27.01.2010


Ответы (5)


Извините, не совсем уловил мысль. Разве вы не можете подключиться к событию onpaste thextarea (по крайней мере, я знаю, что в IE есть такое событие), а затем просто установить значение textarea на вставленное значение?

    pastedContent = window.clipboardData.getData("Text");
    document.getElementById("yourtextarea").value = pastedContent;

РЕДАКТИРОВАТЬ: хорошо, похоже, это работает только в IE и более новых версиях FF, но это не кроссбраузерное решение.

person naivists    schedule 26.01.2010
comment
Это решение только для IE ::- ( - person Axonn; 26.01.2010

Простой.

var isIe = (navigator.userAgent.toLowerCase().indexOf("msie") != -1 
            || navigator.userAgent.toLowerCase().indexOf("trident") != -1);

document.getElementById('textinput').addEventListener('paste', function(e) {
    var text;
    
    if (isIe) {
        text = window.clipboardData.getData('Text')   
    } else {
        text = e.clipboardData.getData('text/plain');
    }
    
    // Do whatever you want with the text
    console.log(text);
    
    //If you don't want the text pasted in the textarea
    e.preventDefault();
});
<textarea id="textinput"></textarea>

Если вы хотите, вы можете даже избавиться от текстовой области и сделать это более непосредственно. Я написал технический сообщение в блоге, объясняющее, как мы копируем и вставка в Lucidchart (где я работаю).

person Richard Shurtz    schedule 03.12.2014

Я не могу вставить текст через JS в простое текстовое поле

Когда вы говорите «простое текстовое поле», вы имеете в виду <input type="text">? Если это так, то я думаю, что установка его атрибута value на текст, который вы захватили из <textarea>, должна работать.

person Paul D. Waite    schedule 26.01.2010
comment
насколько я понимаю, проблема в отлове события вставки в кроссбраузерном режиме - person naivists; 26.01.2010
comment
Я могу поймать событие вставки, но не вставленные данные. Есть некоторые команды, такие как ExecCommand, но они работают только в IE. - person Axonn; 27.01.2010
comment
Ах. Как насчет: 1. Дождитесь завершения события вставки в файле <textarea>. 2. Прочтите атрибут value текстовой области, чтобы получить вставленный текст. 3. Установите value из <textarea> на пустую строку. 4. Установите value обычного текстового поля на текст, который вы получили на шаге 2. - person Paul D. Waite; 27.01.2010

Включить копирование JavaScript в буфер обмена в Firefox или Mozilla: http://www.febooti.com/support/website-help/website-javascript-copy-clipboard.html

person zaca    schedule 26.01.2010
comment
это не решение, так как вы не можете удаленно управлять настройками FF пользователей. - person sarsnake; 22.10.2010

Попробуйте CodeMirror в качестве альтернативного решения. Не проверяет это с помощью копирования и вставки с огромным объемом данных / excel, но, возможно, это поможет...

person NilColor    schedule 26.01.2010