2015-11-22 3 views
11

Я не знаю JavaScript, но мне удалось собрать этот код вместе с помощью битов и болтов из различных ответов на переполнение стека  . Он работает нормально, и он выдает массив всех выбранных флажков в документе через окно предупреждения.Копирование вывода переменной JavaScript в буфер обмена

function getSelectedCheckboxes(chkboxName) { 
    var checkbx = []; 
    var chkboxes = document.getElementsByName(chkboxName); 
    var nr_chkboxes = chkboxes.length; 
    for(var i=0; i<nr_chkboxes; i++) { 
    if(chkboxes[i].type == 'checkbox' && chkboxes[i].checked == true) checkbx.push(chkboxes[i].value); 
    } 
    return checkbx; 
} 

И называть его я использую:

<button id="btn_test" type="button" >Check</button> 
<script> 
    document.getElementById('btn_test').onclick = function() { 
     var checkedBoxes = getSelectedCheckboxes("my_id"); 
     alert(checkedBoxes); 
    } 
</script> 

Теперь я хотел бы изменить его так, когда я нажимаю кнопку btn_test выходной массив checkbx копируется в буфер обмена. Я попытался добавить:

checkbx = document.execCommand("copy"); 

или

checkbx.execCommand("copy"); 

в конце функции и затем вызвать его люблю:

<button id="btn_test" type="button" onclick="getSelectedCheckboxes('my_id')">Check</button> 

Но это не работает. Данные не копируются в буфер обмена.

+0

Я сомневаюсь, что вы можете скопировать необработанный объект JS в буфер обмена. '.execCommand ('copy')' копирует выделение на странице (если разрешено в настройках пользователя). Вы можете попытаться стягивать массив, затем заполнить его текстовой областью, выбрать все из textarea, а затем скопировать с помощью 'execCommand'. При вставке, захвате события и анализе содержимого обратно в массив. – Teemu

+0

OK .. Спасибо за указание на направление. Я думал, что это, вероятно, невозможно, так как похоже, что он не возвращал прямых результатов поиска. Поэтому, я думаю, я постараюсь сделать то, что вы предложили. – harman

+0

Возможно, это глупый вопрос, но где/как вы вставляете необработанный объект JS? – Teemu

ответ

13

ОК, я нашел некоторое время и последовал предложению Teemu, и я смог получить именно то, что хотел.

Итак, вот окончательный код для тех, кто может быть заинтересован. Для пояснения этот код получает все флажки с определенным идентификатором, выводит их в массив, названный здесь checkbx, а затем копирует свое уникальное имя в буфер обмена.

функция JavaScript:

function getSelectedCheckboxes(chkboxName) { 
    var checkbx = []; 
    var chkboxes = document.getElementsByName(chkboxName); 
    var nr_chkboxes = chkboxes.length; 
    for(var i=0; i<nr_chkboxes; i++) { 
    if(chkboxes[i].type == 'checkbox' && chkboxes[i].checked == true) checkbx.push(chkboxes[i].value); 
    } 
    checkbx.toString(); 

    // Create a dummy input to copy the string array inside it 
    var dummy = document.createElement("input"); 

    // Add it to the document 
    document.body.appendChild(dummy); 

    // Set its ID 
    dummy.setAttribute("id", "dummy_id"); 

    // Output the array into it 
    document.getElementById("dummy_id").value=checkbx; 

    // Select it 
    dummy.select(); 

    // Copy its contents 
    document.execCommand("copy"); 

    // Remove it as its not needed anymore 
    document.body.removeChild(dummy); 
} 

И его HTML вызов:

<button id="btn_test" type="button" onclick="getSelectedCheckboxes('ID_of_chkbxs_selected')">Copy</button> 
+1

Это можно сделать без создания элемента HTML? Скажем, например, я просто хотел скопировать строку в буфер обмена пользователей, когда они нажимают кнопку или предварительно заданный элемент? – VikingGoat

+1

Я бы рекомендовал использовать «textarea» вместо «input», таким образом вы также можете скопировать разрывы строк. –

7

Очень полезно. Я изменил его, чтобы скопировать значение переменной JavaScript в буфер обмена: идея

function copyToClipboard(val){ 
    var dummy = document.createElement("input"); 
    document.body.appendChild(dummy); 
    $(dummy).css('display','none'); 
    dummy.setAttribute("id", "dummy_id"); 
    document.getElementById("dummy_id").value=val; 
    dummy.select(); 
    document.execCommand("copy"); 
    document.body.removeChild(dummy); 
} 
8

lbrutti о ответ хорош, но он пишет неверный код!

function copyToClipboard(text){ 
    var dummy = document.createElement("input"); 
    document.body.appendChild(dummy); 
    dummy.setAttribute('value', text); 
    dummy.select(); 
    document.execCommand("copy"); 
    document.body.removeChild(dummy); 
} 
copyToClipboard('Hello, World!') 
1

Для общих целей копирования любой текст в буфер обмена, я написал следующую функцию:

function textToClipboard (text) { 
    var dummy = document.createElement("textarea"); 
    document.body.appendChild(dummy); 
    dummy.value = text; 
    dummy.select(); 
    document.execCommand("copy"); 
    document.body.removeChild(dummy); 
} 

Значение параметра вставляется значения вновь созданного <textarea>, который затем выбрано, его значение копируется в буфер обмена, а затем удаляется из документа.

Смежные вопросы