Я хочу скопировать текст с веб-страницы в буфер обмена с помощью JavaScript, однако .select () не работает в Chrome (версия 63).

Код выглядит следующим образом:

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript">
    function preventDefault(event)
    {
        event.preventDefault();

        var copyText = document.getElementById("MainContent_txtClientDetailsName");
        copyText.select();
        document.execCommand("Copy");

        return false;
    }
</script>

<p id="nameTag">Name: </p>
<asp:Label ID="lblClientDetailsName" runat="server" autopostback="false"></asp:Label>
<asp:TextBox ID="txtClientDetailsName" runat="server" ReadOnly="true" Enabled="false">Testing</asp:TextBox>
<asp:LinkButton ID="btnCopyTitle" runat="server" OnClientClick="preventDefault(event)" CssClass="btn btn-default btn-xs">
    <span class="glyphicon glyphicon-copy"></span>
</asp:LinkButton>
</asp:Content>

Я пробовал это в Edge, и он отлично работает. При поиске в Интернете предлагалось вызвать copyText.focus (), но это тоже не работает.

Код по сути является копией руководства w3schools по адресу https://www.w3schools.com/howto /howto_js_copy_clipboard.asp, который отлично работает в Chrome.

0
Meitsrik 3 Янв 2018 в 15:55

2 ответа

Лучший ответ

Ваш код в порядке, проблема в том, что вы отключаете текстовое поле при отключении текстового поля в веб-форме copyText.select(); не работает удалите эти атрибуты ReadOnly="true" Enabled="false" он отлично работает с существующим кодом, если вы не хотите удалять эти атрибуты, тогда используйте метод ниже js, который работает для вас.

<script>
function preventDefault(event) {
    var copyText = document.getElementById("<%=txtClientDetailsName.ClientID%>");
    $(copyText).removeAttr('ReadOnly Enabled disabled')
    $(copyText).removeClass('aspNetDisabled')

  copyText.select();
  document.execCommand("Copy");
  alert("Copied the text: " + copyText.value);
  $(copyText).attr({
      ReadOnly:"true",
      disabled:"disabled",
  })
  $(copyText).addClass('aspNetDisabled')
  event.preventDefault();
}
    </script>
0
Hafiz Asad 3 Янв 2018 в 13:55

В chrome у нас есть эта известная проблема. Мы должны отключить событие onmouseup, чтобы сохранить выбор.

function preventDefault(event)
{
  event.preventDefault();
  var copyText = document.getElementById("MainContent_txtClientDetailsName");
  copyText.onmouseup = function(){return false};
  copyText.select();
  document.execCommand("copy");
  return false;
}
0
Rahul Mukherjee 3 Янв 2018 в 13:22