【问题标题】:Prevent copy/paste and right-click meant for textbox (email address)防止复制/粘贴和右键单击文本框(电子邮件地址)
【发布时间】:2012-03-16 03:55:06
【问题描述】:

我想阻止用户:

  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#”之类的前缀。这就是标签的用途。

标签: c# asp.net textbox copy-paste right-click


【解决方案1】:

当使用 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 类的元素上
  • 这个答案+1。为了彻底,可以通过在浏览器中禁用 JS 来绕过任何 Javascript 解决方案。但这超出了普通用户的范围。
  • 谢谢。问题是我不想要警报。我希望当您右键单击时不显示 Windows 上下文菜单,并且不允许复制和粘贴的 ctrl 功能。
  • 我在很多生产网站上都看到过这种情况,他们希望用户输入并确认他们的电子邮件地址。
  • +1 好答案。但是,我不同意您在 html 头评论中的生产/jQuery 参考。推荐的最佳做法是将所有 javascript 放在页面底部的结尾 &lt;/body&gt; 标记之前,以加快加载速度,最好在一个 script.js 引用中,并且从不内联。查看 html5boilerplate.com 了解所有推荐的最佳做法。
【解决方案2】:
<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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2018-09-24
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多