2015-11-22 14 views
11

Nie mam wiedzy na temat JavaScript, ale udało mi się umieścić ten kod razem za pomocą bitów i śrub z różnych odpowiedzi przepełnienia Stack  . Działa poprawnie i wyprowadza tablicę wszystkich zaznaczonych pól wyboru w dokumencie za pomocą pola alertu.Kopiowanie danych wyjściowych zmiennej JavaScript do schowka

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; 
} 

I to nazwać używam:

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

Teraz chciałbym zmodyfikować go tak po kliknięciu przycisku btn_test tablica wyjściowa checkbx jest kopiowany do schowka. Próbowałem dodając:

checkbx = document.execCommand("copy"); 

lub

checkbx.execCommand("copy"); 

na końcu funkcji, a następnie wywołanie to lubią:

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

Ale to nie działa. Żadne dane nie są kopiowane do schowka.

+0

Wątpię, czy możesz skopiować surowy obiekt JS do schowka. '.execCommand ('copy')' kopiuje zaznaczenie na stronie (jeśli jest dozwolone w preferencjach użytkownika). Możesz spróbować ułożyć tablicę, a następnie wypełnić ją tekstem, wybrać wszystko z textarea, a następnie skopiować za pomocą 'execCommand'. Podczas wklejania przechwyć zdarzenie i odtwórz zawartość z powrotem do tablicy. – Teemu

+0

OK .. Dzięki za wskazanie mi kierunku. Sądziłem, że to prawdopodobnie nie jest możliwe, ponieważ nie zwracają żadnych bezpośrednich wyników wyszukiwania. Więc myślę, że postaram się zrobić tak, jak sugerujesz. – harman

+0

To może być głupie pytanie, ale gdzie/jak wkleić surowy obiekt JS? – Teemu

Odpowiedz

13

OK, znalazłem trochę czasu i poszedłem za sugestią przez Teemu i udało mi się uzyskać dokładnie to, co chciałem.

Oto ostateczny kod dla każdego, kto może być zainteresowany. W celu wyjaśnienia, ten kod otrzymuje wszystkie zaznaczone pola wyboru określonego identyfikatora, wyświetla je w tablicy o nazwie checkbx, a następnie kopiuje ich unikalną nazwę do schowka.

funkcji 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); 
} 

I jego wezwanie HTML:

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

Czy można to zrobić bez tworzenia elementu HTML? Powiedzmy na przykład, że po prostu chciałem skopiować ciąg do schowka użytkownika po kliknięciu przycisku lub wstępnie określonego elementu? – VikingGoat

+1

Polecam używanie "textarea" zamiast "input", w ten sposób można również kopiować podziały linii. –

7

bardzo przydatne. Zmodyfikowałem go, aby skopiować wartość zmiennej JavaScript do schowka:

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

Koncepcja lbrutti jest odpowiednia, ale pisze błędny kod!

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

Do ogólnych celów kopiując dowolny tekst do schowka, napisałem następującą funkcję:

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

Wartość parametru jest wkładany do wartości nowoutworzone <textarea>, który następnie wybrane, jego wartość jest kopiowana do schowka, a następnie zostaje usunięta z dokumentu.

Powiązane problemy