5

需要防止使用 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>
4

3 回答 3

12

继续:使用 jQuery 禁用文本框的剪切、复制和粘贴功能

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

注意:Opera 12.10 之前不支持剪切、复制和粘贴事件

于 2013-03-21T05:28:50.293 回答
2

这是用 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;
    });
});

希望能帮助到你!欢迎更正和改进!

于 2015-10-06T03:16:25.027 回答
0

由于不支持 Jquery 1.9 以后的实时事件,我们可以将“on”用于相同目的。

  $('#Actual').on("cut copy paste", function (e) {
      e.preventDefault();
  });
于 2016-05-10T10:24:30.420 回答