2015-11-22 30 views
11

Non ho conoscenza di JavaScript, ma sono riuscito a mettere insieme questo codice usando bit e bulloni da varie Risposte dello Stack   Overflow. Funziona OK, e genera una matrice di tutte le caselle selezionate in un documento tramite una finestra di avviso.Copia l'output di una variabile JavaScript negli Appunti

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

E chiamarlo io uso:

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

Ora vorrei modificarlo in modo che quando si fa clic sul pulsante btn_test l'array di uscita checkbx viene copiato negli appunti. Ho provato ad aggiungere:

checkbx = document.execCommand("copy"); 

o

checkbx.execCommand("copy"); 

alla fine della funzione e quindi chiamando le cose come:

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

Ma non funziona. Nessun dato viene copiato negli appunti.

+0

Dubito che sia possibile copiare un oggetto JS non formattato negli appunti. '.execCommand ('copy')' copia una selezione su una pagina (se consentito nelle preferenze dell'utente). Si può provare a stringificare l'array, quindi compilare una textarea con esso, selezionare tutto da textarea e quindi copiare con 'execCommand'. Quando incollare, catturare l'evento e analizzare il contenuto di nuovo alla matrice. – Teemu

+0

OK .. Grazie per avermi indicato in una direzione. Ho pensato che probabilmente non era possibile in quanto non sembrava che restituisse risultati di ricerca diretta. Quindi credo che proverò a fare come hai suggerito. – harman

+0

Questa è forse una domanda stupida, ma dove/come si incollerebbe un oggetto JS non elaborato? – Teemu

risposta

13

OK, ho trovato un po 'di tempo e ho seguito il suggerimento da Teemu e sono stato in grado di ottenere esattamente quello che volevo.

Quindi ecco il codice finale per chiunque possa essere interessato. Per chiarimenti, questo codice ottiene tutte le caselle di controllo di un determinato ID, le restituisce in un array, denominato qui checkbx, e quindi copia il loro nome univoco negli Appunti.

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

E il suo appello HTML:

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

Questo può essere fatto senza creare un elemento HTML? Per esempio, voglio solo copiare una stringa negli appunti degli utenti quando fanno clic su un pulsante o su un elemento specificato? – VikingGoat

+1

Si consiglia di utilizzare una "textarea" anziché un "input", in questo modo è possibile copiare anche interruzioni di riga. –

7

Molto utile. Ho modificato per copiare un valore variabile JavaScript per appunti: idea

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

di lbrutti di una risposta è buona, ma si scrive codice errato!

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

Per scopi generali di copiare qualsiasi testo negli appunti, ho scritto la seguente funzione:

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

Il valore del parametro viene inserito nel valore di una nuova creazione <textarea>, che è poi selezionato, il suo valore viene copiato negli appunti e quindi rimosso dal documento.

Problemi correlati