防止副本/粘贴和右键点击文本框(电子邮件地址)

7
我希望防止用户进行以下操作:
  1. 从第一个文本框复制并粘贴到第二个文本框
  2. 使用右键菜单从第一个文本框复制并粘贴到第二个文本框。
但此方法目前无法实现。
<html>
  <head runat="server">
    <title>Confirm email page</title>
    <script  type="text/javascript" language="javascript">
    function DisableRightClick(event) {
        //For mouse right click 
        if (event.button == 2) {

        }
    }
    function DisableCtrlKey(e) {
        var code = (document.all) ? event.keyCode : e.which;
        // look for CTRL key press
        if (parseInt(code) == 17) {
            window.event.returnValue = false;
        }
    }
    </script>

  </head>
  <body style="font-family: Verdana; font-size: 1em">
    <form id="form1" runat="server">
      <div>
        <h1>Confirm Email</h1>
        <asp:Label ID="Label2" runat="server" Text="Enter Email Address: "></asp:Label>
        <asp:TextBox ID="TextBox2" runat="server" oncopy="return false" onMouseDown="DisableRightClick(event)" ></asp:TextBox><br />
        <asp:Label ID="Label3" runat="server" Text="Confirm Email Address: "></asp:Label>
        <asp:TextBox ID="TextBox3" runat="server" onKeyDown="return DisableCtrlKey(event)"></asp:TextBox><br />
      </div>
    </form>
  </body>
</html>

搞定了!!!

<div>
<h1>Copy Paste Preventer!!!</h1>
    <asp:Label ID="Label1" runat="server" Text="Enter Username: "></asp:Label>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
    <asp:Label ID="Label2" runat="server" Text="Enter Email Address: "></asp:Label>
    <asp:TextBox ID="email" runat="server"  oncopy="return false" onpaste="return false" oncut="return false" oncontextmenu="forms[0].elements[0].value++; return false"></asp:TextBox><br />
    <asp:Label ID="Label3" runat="server" Text="Confirm Email Address: "></asp:Label>
    <asp:TextBox ID="TextBox3" runat="server" oncopy="return false" onpaste="return false" oncut="return false" oncontextmenu="forms[0].elements[0].value++; return false"> </asp:TextBox><br />
</div>

请不要在您的标题前加上"ASP.Net c#"等前缀,这就是标签的作用。 - John Saunders
2个回答

4

使用jQuery时,这非常简单,并且它完全兼容ASP.NET:

<script type='text/javascript' src='http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js'>
</script>
<script type="text/javascript">
    $(function() {
    $('input[id$=TextBox2]').bind('cut copy paste', function(e) {
            e.preventDefault();
            alert('You cannot ' + e.type + ' text!');
        });
    });
</script>

这是一篇与ASP.NET相关的文章,解释了它如何与之一起使用:
http://www.dotnetcurry.com/ShowArticle.aspx?ID=398 正如Scott所指出的那样:在生产环境中,您应该将jQuery引用放置在HTML底部(仍然在body标签内)。
更新: 由于您要求完全禁止上下文菜单,因此可以像这样做:
添加此脚本:
<script type="text/javascript">
    document.getElementById('TextBox2').oncontextmenu = function (){
        return false;
    };
</script>

当返回值为false时,菜单项不会显示。以下是此功能的浏览器支持概述:
http://help.dottoro.com/ljhwjsss.php

我会通过类选择元素 $(".noCopy").bind(...)然后这个限制可以放在任何具有该CSS类的元素上。 - David
任何 JavaScript 解决方案都可以通过在浏览器中禁用 JS 来绕过。但这已经超出了普通用户的能力范围。 - mgnoonan
谢谢。问题在于我不想要警报。我更希望右键单击时不会出现Windows上下文菜单,并且不允许使用Ctrl复制和粘贴功能。 - Susan
@Susan,我添加了另一种方法,防止上下文被显示。 - ntziolis
@Susan,由于这是一个js事件,我猜它可能不是有效的xhtml,我进一步简化了解决方案,请检查更新后的代码。 - ntziolis
显示剩余5条评论

3
<div>
<h1>Copy Paste Preventer!!!</h1>
    <asp:Label ID="Label1" runat="server" Text="Enter Username: "></asp:Label>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
    <asp:Label ID="Label2" runat="server" Text="Enter Email Address: "></asp:Label>
    <asp:TextBox ID="email" runat="server"  oncopy="return false" onpaste="return false" oncut="return false" oncontextmenu="forms[0].elements[0].value++; return false"></asp:TextBox><br />
    <asp:Label ID="Label3" runat="server" Text="Confirm Email Address: "></asp:Label>
    <asp:TextBox ID="TextBox3" runat="server" oncopy="return false" onpaste="return false" oncut="return false" oncontextmenu="forms[0].elements[0].value++; return false"> </asp:TextBox><br />
</div>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接