Copie la sortie D'une variable JavaScript dans le presse-papiers
Je n'ai aucune connaissance de JavaScript, mais j'ai réussi à assembler ce code en utilisant des bits et des boulons provenant de diverses réponses de débordement de pile. Cela fonctionne bien, et il génère un tableau de toutes les cases à cocher sélectionnées dans un document via une zone d'alerte.
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;
}
Et pour l'appeler, j'utilise:
<button id="btn_test" type="button" >Check</button>
<script>
document.getElementById('btn_test').onclick = function() {
var checkedBoxes = getSelectedCheckboxes("my_id");
alert(checkedBoxes);
}
</script>
Maintenant, je voudrais le modifier de sorte que lorsque je clique sur le bouton btn_test
, Le tableau de sortie checkbx
est copié dans le presse-papiers. J'ai essayé d'ajouter:
checkbx = document.execCommand("copy");
Ou
checkbx.execCommand("copy");
À la fin de la fonction et puis l'appeler comme:
<button id="btn_test" type="button" onclick="getSelectedCheckboxes('my_id')">Check</button>
Mais ça ne marche pas. Aucune donnée n'est copiée dans le presse-papiers.
5 réponses
OK, j'ai trouvé du temps et j'ai suivi la suggestion de Teemu et j'ai pu obtenir exactement ce que je voulais.
Voici Donc le code final pour ceux qui pourraient être intéressés. Pour plus de précisions, ce code obtient toutes les cases à cocher d'un certain ID, les affiche dans un tableau, nommé ici checkbx
, puis copie leur nom unique dans le presse-papiers.
Fonction 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);
}
Et son appel HTML:
<button id="btn_test" type="button" onclick="getSelectedCheckboxes('ID_of_chkbxs_selected')">Copy</button>
L'idée de Lbrutti d'une réponse est bonne, mais il écrit un mauvais code!
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!')
Très utile. Je l'ai modifié pour copier une valeur de variable JavaScript dans le presse-papiers:
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);
}
À des fins générales de copie de tout texte dans le presse-papiers, j'ai écrit la fonction suivante:
function textToClipboard (text) {
var dummy = document.createElement("textarea");
document.body.appendChild(dummy);
dummy.value = text;
dummy.select();
document.execCommand("copy");
document.body.removeChild(dummy);
}
La valeur du paramètre est inséré dans la valeur d'un nouvellement créé <textarea>
, qui est ensuite sélectionné, sa valeur est copiée dans le presse-papiers, puis il est supprimé du document.
Je veux juste ajouter, si quelqu'un veut copier deux entrées différentes dans le presse-papiers. J'ai également utilisé la technique de le mettre à une variable puis mettre le texte de la variable à partir des deux entrées dans une zone de texte.
Remarque: le code ci-dessous provient d'un utilisateur demandant comment copier plusieurs entrées utilisateur dans le presse-papiers. Je viens de le réparer pour fonctionner correctement. Attendez-vous donc à un style ancien comme l'utilisation de var
au lieu de let
ou const
. Je recommande également d'utiliser addEventListener
pour le bouton.
function doCopy() {
try{
var unique = document.querySelectorAll('.unique');
var msg ="";
unique.forEach(function (unique) {
msg+=unique.value;
});
var temp =document.createElement("textarea");
var tempMsg = document.createTextNode(msg);
temp.appendChild(tempMsg);
document.body.appendChild(temp);
temp.select();
document.execCommand("copy");
document.body.removeChild(temp);
console.log("Success!")
}
catch(err) {
console.log("There was an error copying");
}
}
<input type="text" class="unique" size="9" value="SESA / D-ID:" readonly/>
<input type="text" class="unique" size="18" value="">
<button id="copybtn" onclick="doCopy()"> Copy to clipboard </button>