Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
624 views
in Technique[技术] by (71.8m points)

javascript - copy text to clipboard using .select() getting Uncaught TypeError

I'm trying to follow this code: https://www.w3schools.com/howto/howto_js_copy_clipboard.asp

HTML Modal:

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title" id="myModalLabel">App Link</h4>
          </div>
          <div class="modal-body">
            <input id="appID" value="123"></input>
            <button type="button" class="btn btn-success" id="copyBtn">Copy</button>
            </div>                  
        </div>
      </div>
    </div>

Here's my JS:

var copyBtn = document.getElementById('copyBtn');

copyBtn.onclick = function(){
    var myCode = document.getElementById('appID').value;
    var fullLink = document.createElement('input');
    document.body.appendChild(fullLink);
    fullLink.value = "http://fulllink/" + myCode;
    fullLink.select();
    document.execCommand("copy", false);
    fullLink.remove();
    alert("Copied the text: " + fullLink.value);
}

Code will not work when input and button are inside the modal; code will work if placed in the body. Why?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You are receiving the error because .select is a function bound to input elements. You're currently trying to call select on your fullLink string. We need to create an input element and give it your value. Something like this:

var copyBtn = document.getElementById('copyBtn');
copyBtn.onclick = function(){
    var myCode = document.getElementById('appID').value;
    var fullLink = document.createElement('input');
    document.body.appendChild(fullLink);
    fullLink.value = "http://fulllink/" + myCode;
    fullLink.select();
    document.execCommand("copy", false);
    fullLink.remove();
    alert("Copied the text: " + fullLink.value);
}
<input id="appID" value="123"></input>
<button id="copyBtn">Copy</button>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...