在文本字段odoo 13上禁用复制粘贴

问题描述

我有一个文本字段。

my_field = fields.Text()

我想使用Java脚本或python禁用复制和粘贴(ctrl + c,ctrl + v)。谢谢,我该怎么做。

解决方法

您可以扩展FieldText widget并防止copypaste events。创建一个新的小部件并绑定事件,然后在文本字段上设置widget属性。

示例: (模块名称为stack_overflow

odoo.define('stack_overflow.actions',function (require) {
"use strict";

   var basic_fields = require('web.basic_fields');
   var registry = require('web.field_registry');

   var no_copy_paste = basic_fields.FieldText.extend({

        events: _.extend({},basic_fields.FieldText.prototype.events,{
            'copy': '_onCopyPaste','paste': '_onCopyPaste',}),_onCopyPaste: function(ev) {
            ev.preventDefault();
            alert("Copy/Paste Disabled!");
        },});

   registry.add('no_copy_paste',no_copy_paste);
});

将js文件添加到asset bundle

<template id="assets_backend" name="stack_overflow assets" inherit_id="web.assets_backend">
    <xpath expr="." position="inside">
        <script type="text/javascript" src="/stack_overflow/static/src/js/actions.js"></script>
    </xpath>
</template>

在文本字段上设置小部件属性:

<field name="description" widget="no_copy_paste" placeholder="Add a description..." />
,

通过附加事件处理程序copypaste,可以使用jquery防止在文本字段上进行复制粘贴。这是示例。

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