2013-03-21 2 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

+0

в событии вставки add e.preventDefault() method –

ответ

11

Здесь пойти: Disable Cut, Copy and Paste function for textbox using jQuery

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

Примечание: Opera не поддерживает вырезать, копировать и вставлять события до версии 12,10

+0

Я с удивлением обнаруживаю, что эти события поддерживаются в FF + GC. Обратите внимание, однако, что они не поддерживаются Opera (и я не думаю, что jQuery может это изменить). –

+0

Да, он работает и в Opera. Вы можете попробовать это в Opera .. [Working Demo] (http://jsbin.com/uyuzo), и он работает. –

+0

С каких это пор? [dotorro.com] (http://help.dottoro.com/ljuimtmq.php) утверждает, что нет. –

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

+1

@Shikkediel ... вы правы !!! .bind() устарел. Я обновлю его с помощью .on() – Equiman

0

Поскольку Jquery 1.9 onward live event не поддерживается, мы можем использовать «on» для этой же цели.

$('#Actual').on("cut copy paste", function (e) { 
     e.preventDefault(); 
    }); 
Смежные вопросы