asp:文本框通过单击按钮选择所有文本并复制到客户端剪贴板

时间:2016-06-13 08:28:27

标签: c# asp.net textbox multiline

有没有办法选择多行asp:textbox中的所有文本并通过单击按钮将其复制到客户端剪贴板,使用c#?

提前谢谢。

4 个答案:

答案 0 :(得分:1)

您可以使用document.execCommand("copy");,但请注意,新浏览器主要支持此功能,据我所知,不支持Safari:

 <head runat="server">
    <title></title>
    <script src="https://code.jquery.com/jquery-1.12.2.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#btnCopy").click(function () {
                var id = "#" + "<%= txtText.ClientID %>";
                try {
                    $(id).select();
                    document.execCommand("copy");
                }
                catch (e) {
                    alert('Copy operation failed');
                }
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:TextBox ID="txtText" runat="server" Text="Some sample text to copy"></asp:TextBox>
        <button id="btnCopy">Copy</button>
    </form>
</body>

经过测试并可与以下浏览器配合使用:

  1. IE 11及以上
  2. Google Chrome 51.0.2704.84
  3. Firefox 43.0.1

答案 1 :(得分:1)

我认为@Denis Wessels的答案很棒但是使用了普通的textarea而不是asp:TextBox,因此我想编写自己的包含asp:TextBox控件。

考虑你有一个带有asp:TextBox服务器控件的多行文本区域和一个将内容复制到剪贴板的按钮:

<asp:TextBox ID="TextArea" runat="server" TextMode="MultiLine">
<button id="copy">Copy to Clipboard</button>

使用jQuery和类似的JS函数:

<script type="text/javascript">
$(document).ready(function () {
        $("#copy").click(function() {
            // use ASP .NET ClientID if you don't sure
            // for ASP .NET 4.0 and above, set your ClientID with static mode
            var textarea = "<%= TextArea.ClientID %>"; 
            $(textarea).select();
            $(textarea).focus(); // set focus to this element first
            copyToClipboard(document.getElementById(textarea));
        });
});

function copyToClipboard(elem)
{
    var result;
    var target = elem;
    startPoint = elem.selectionStart;
    endPoint = elem.selectionEnd;

    var currentFocus = document.activeElement;
    target.setSelectionRange(0, target.value.length);

    try
    {
        // this may won't work on Safari
        result = document.execCommand("copy");
    }
    catch (e)
    {
        return alert("Copy to clipboard failed: " + e);
    }

    // returning original focus
    if (currentFocus && typeof currentFocus.focus === "function") {
        currentFocus.focus();
    }

    elem.setSelectionRange(startPoint, endPoint);

    return result;
}
</script>

带有微小变化的参考:https://stackoverflow.com/a/22581382https://stackoverflow.com/a/30905277

请注意,对于ASP .NET 4及更高版本,您可以设置静态ClientID:

<asp:TextBox ID="TextArea" runat="server" TextMode="MultiLine" ClientID="TextArea" ClientIDMode="Static">

因此您可以直接使用$("#TextArea")而不是$("<%= TextArea.ClientID %>")

答案 2 :(得分:0)

您可以使用此课程: System.Windows.Forms.Clipboard.SetText(..)&lt; =将文本设置为剪贴板, 在SetText()中,您放置textbox.Text以从多行asp.net文本框中获取文本。

答案 3 :(得分:0)

function copyToClipboard(element) {
  var $temp = $("<input>");
  $("body").append($temp);
  $temp.val($(element).text()).select();
  document.execCommand("copy");
  $temp.remove();
}
<link href='https://fonts.googleapis.com/css?family=Oswald' rel='stylesheet' type='text/css'>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<center>
  <p id="p1">Hello, I'm TEXT 1</p>
  <p id="p2">Hi, I'm the 2nd TEXT</p><br/>

  <button onclick="copyToClipboard('#p1')">Copy TEXT 1</button>
  <button onclick="copyToClipboard('#p2')">Copy TEXT 2</button>

  <br/><br/><input type="text" id="" placeholder="TEST it here;)" />
</center>