So I am using a MacBook and I have a copy button that copies a generated text input on a text field.
This is the code:
document.querySelector("#btnCopy").addEventListener('click', copy);
async function copy(){
var text = document.querySelector("#docNumber");
text.select();
navigator.clipboard.writeText(text.value)
}
When I check the clipboard nothing has been copied.
Any suggestion of what is going on?
Thanks, munity.
So I am using a MacBook and I have a copy button that copies a generated text input on a text field.
This is the code:
document.querySelector("#btnCopy").addEventListener('click', copy);
async function copy(){
var text = document.querySelector("#docNumber");
text.select();
navigator.clipboard.writeText(text.value)
}
When I check the clipboard nothing has been copied.
Any suggestion of what is going on?
Thanks, munity.
Share Improve this question edited Oct 25, 2021 at 7:50 Danilo Ivanovic 1,2262 gold badges10 silver badges21 bronze badges asked Oct 24, 2021 at 21:42 Rafael NicolaRafael Nicola 843 silver badges11 bronze badges 1- Could you add a snippet, more code, or an error message? – Danilo Ivanovic Commented Oct 24, 2021 at 21:51
3 Answers
Reset to default 2The following approach works in Chrome, Firefox, Internet Explorer and Edge, and in recent versions of Safari (copy support was added in version 10 which was released Oct 2016).
document.querySelector("#btnCopy").addEventListener('click', copyToClipboard);
function copyToClipboard() {
let text = document.querySelector("#docNumber");
text.select();
text = text.value;
if (window.clipboardData && window.clipboardData.setData) {
// IE: prevent textarea being shown while dialog is visible
return window.clipboardData.setData("Text", text);
} else if (document.queryCommandSupported &&
document.queryCommandSupported("copy")) {
var textarea = document.createElement("textarea");
textarea.textContent = text;
// Prevent scrolling to bottom of page in MS Edge
textarea.style.position = "fixed";
document.body.appendChild(textarea);
textarea.select();
try {
// Security exception may be thrown by some browsers
return document.execCommand("copy");
} catch (ex) {
console.warn("Copy to clipboard failed.", ex);
return false;
} finally {
document.body.removeChild(textarea);
}
}
}
<input id="docNumber" type="text" value="Clipboard text test">
<button id="btnCopy">Copy to Clipboard</button>
Reference:
- How do I copy to the clipboard in JavaScript?
I think you need to assign the selected text to something.
let t = text.select();
or better yet:
navigator.clipboard.writeText(text.select())
This may be caused by hosting via http
instead of https
. Although, in this case we can't be sure of the cause.
When a page is called over http
on any address that isn't localhost
or 127.0.0.1
. The browser will leave navigator.clipboard
as undefined
.