2013-03-21 159 views
5

需要防止使用jquery复制粘贴到文本框中。 如何实现它?使用jquery防止复制粘贴

<table> 
    <tr> 
    <h:inputlabel value="Actual"></h:inputlabel> 
     <td> 
     <h:inputtext id="Actual" styleClass="input-tex" value="#bean.customer"></h:inputtext> 
     <td> 
    </tr> 
<table> 
+3

只要确保这并不意味着'安全措施',因为您可以通过禁用java脚本,检查源代码,截图以及其他方法轻松绕过它。 – Moak 2013-03-21 05:29:54

+0

添加e.preventDefault()方法 – 2016-09-11 08:08:24

回答

11

这里去:Disable Cut, Copy and Paste function for textbox using jQuery

$(document).ready(function(){ 
    $('#Actual').bind("cut copy paste",function(e) { 
     e.preventDefault(); 
    }); 
}); 

注:歌剧不支持剪切,复制和版本12.10

+0

我很惊喜地发现FF + GC支持的这些事件。但是请注意,Opera不支持它们(我不认为jQuery可以改变这一点)。 – 2013-03-21 05:34:36

+0

是的,它也可以在Opera中使用..你可以在Opera中试试这个.. [Working Demo](http://jsbin.com/uyuzo),它可以工作。 – 2013-03-21 05:38:56

+0

从什么时候开始? [dotorro.com](http://help.dottoro.com/ljuimtmq.php)声称它没有。 – 2013-03-21 05:41:05

1

这是最和 '官方' 的方式来之前粘贴事件用Jquery做。

$(document).ready(function() { 
    var ambit = $(document); 

    // Disable Cut + Copy + Paste (input) 
    ambit.on('copy paste cut', function (e) { 
     e.preventDefault(); //disable cut,copy,paste 
     return false; 
    }); 
}); 

但是,它只适用于,因为我读了一些Opera版本不支持。允许输入外的所有内容都被复制。

如果你想完全禁用什么,paranoic mode: on,你可以用这个方法:

$(document).ready(function() { 
    var ambit = $(document); 

    // Disable Cut + Copy + Paste (input) 
    ambit.on('copy paste cut', function (e) { 
     e.preventDefault(); //disable cut,copy,paste 
     return false; 
    }); 

    // Disable Cut + Copy + Paste and Browser Admin Tools (all document) 
    ambit.keydown(function (e) { 
     var forbiddenCtrlKeys = new Array('c', 'x', 'v', 'ins', 'u'); 
     var forbiddenShiftKeys = new Array('del', 'ins', 'f2', 'f4', 'f7'); 
     var forbiddenCtrlShiftKeys = new Array('k', 'i', 'm', 's', 'j'); 
     var keyCode = (e.keyCode) ? e.keyCode : e.which; 

     var isCtrl, isShift; 
     isCtrl = e.ctrlKey; 
     isShift = e.ctrlShift; 

     string = getKeyCodeString(keyCode); 

     if (string == 'f12') 
     { 
      e.preventDefault(); 
      return false; 
     } 

     if (isCtrl && !isShift) { 
      for (i = 0; i < forbiddenCtrlKeys.length; i++) { 
       if (forbiddenCtrlKeys[i] == string) { 
        e.preventDefault(); 
        return false; 
       } 
      } 
     } 

     if (!isCtrl && isShift) { 
      for (i = 0; i < forbiddenShiftKeys.length; i++) { 
       if (forbiddenShiftKeys[i] == string) { 
        e.preventDefault(); 
        return false; 
       } 
      } 
     } 

     if (isCtrl && isShift) { 
      for (i = 0; i < forbiddenCtrlShiftKeys.length; i++) { 
       if (forbiddenCtrlShiftKeys[i] == string) { 
        e.preventDefault(); 
        return false; 
       } 
      } 
     } 

     return true; 
    }); 

    var getKeyCodeString = function(keyCode) 
    { 
     var string; 
     switch (keyCode) { 
      case 45: 
       string = 'ins'; break; 
      case 46: 
       string = 'del'; break; 
      case 113: 
       string = 'f2'; break; 
      case 115: 
       string = 'f4'; break; 
      case 118: 
       string = 'f7'; break; 
      case 123: 
       string = 'f12'; break; 
      default: 
       string = String.fromCharCode(keyCode); 
       break; 
     } 
     return string.toLowerCase(); 
    } 
}); 

又是怎么回事上下文菜单?

$(document).ready(function() { 
    var ambit = $(document); 

    // Disable Contextual Menu 
    ambit.on('contextmenu', function (e) { 
     e.preventDefault(); 
     return false; 
    }); 

那么移动?

$(document).ready(function() { 
    var ambit = $(document); 

    // Disable Tap and Hold (jQuery Mobile) 
    ambit.on('taphold', function (e) { 
     e.preventDefault(); 
     return false; 
    }); 
}); 

希望它有帮助!更正和改进是欢迎!

+0

谁使用'.bind()'了... – Shikkediel 2015-10-06 23:31:03

+1

@Shikkediel ...你是对的! .bind()已被弃用。我将使用.on()更新它 – Equiman 2016-08-30 22:45:26

0

由于jquery 1.9以前的直播活动不受支持,我们可以使用“on”来达到同样的目的。

$('#Actual').on("cut copy paste", function (e) { 
     e.preventDefault(); 
    });