Search code examples
javascriptjqueryinputcopyclipboard

Copying to clipboard textbox value using jQuery/JavaScript


I have a textbox & button which looks like this:

     <div class="col-xs-11" style="padding:20px 0 ">
     <input type="text" class="form-control txtKeywords" id="txtKeyw" style="margin-bottom:10px; height:45px;" maxlength="80" placeholder="Click on keywords to combine your title">
   <button type="submit" class="btn btn-space btn-success btn-shade4 btn-lg copyToClipboard">
    <i class="icon icon-left s7-mouse"></i> Copy to Clipboard
     /button>

And when the user clicks the button copy to clipboard, I'd like to copy the contents of the textbox into the clipboard like this:

$(document).on("click", ".copyToClipboard", function () {
    copyToClipboard("txtKeyw");
    successMessage();
});

Where the definition of the copyToClipboard function is:

 function copyToClipboard(element) {
            var $temp = $("<input>");
            $("body").append($temp);
            $temp.val($(element).text()).select();
            document.execCommand("copy");
            $temp.remove();
        }

But when I do this, nothing happens -- no values are copied to clipboard from the textbox... What am I doing wrong here?

MORE INFORMATION:

  • This happens in both Chrome 59 64-bit and Firefox 54 32-bit.
  • successMessage() is called and displayed in the browser.
  • Adding # in front of the element's ID does not resolve the issue.

Solution

  • STEP 1: Change your copyToClipboard(element) like this:

    function copyToClipboard(text) {
    
       var textArea = document.createElement( "textarea" );
       textArea.value = text;
       document.body.appendChild( textArea );       
       textArea.select();
    
       try {
          var successful = document.execCommand( 'copy' );
          var msg = successful ? 'successful' : 'unsuccessful';
          console.log('Copying text command was ' + msg);
       } catch (err) {
          console.log('Oops, unable to copy',err);
       }    
       document.body.removeChild( textArea );
    }
    

    STEP 2: Give an id to your button and then add an event listener to it like this:

    $( '#btnCopyToClipboard' ).click( function()
     {
         var clipboardText = "";
         clipboardText = $( '#txtKeyw' ).val(); 
         copyToClipboard( clipboardText );
         alert( "Copied to Clipboard" );
     });