如何替换 javascript 中的 onpaste 函数

How to replace the onpaste function in javascript?

本文关键字:javascript 中的 onpaste 函数 替换 何替换      更新时间:2023-09-26

网页上的输入元素定义如下,以防止粘贴密码:

<input type="password" class="field" id="password" name="password" title="Enter your password" maxlength="50" onpaste="javascript:return false;" size="38" tabindex="2">

我想在此输入字段中启用粘贴。使用 Firebug 或等效项,我可以编辑 onpaste 函数,因此代码为:

onpaste="javascript:return true;"

这对我来说很好,但对于其他用户,我想要一个更简单的解决方案。我想到的是,如果我能给他们一些Javascript,他们可以打开控制台并粘贴一个简单的单行代码。然而,当我尝试这样做时,Javascript没有效果。我尝试了以下方法,但都没有奏效。

$('#password').onpaste=""
$('#password').onpaste="javascript:return true;"

我做错了什么?

问题是你试图将jQuery与常规JavaScript结合起来。你可以只使用纯JavaScript来删除onpaste监听器。

document.getElementById('password').onpaste=""

如果你想改用jQuery,你可以使用:

$('#password')[0].onpaste=""

这将给出相同的结果。

只需删除 DOM 元素的 onpaste 属性,而不是没有 onpaste 属性的 jQuery 对象。您的代码正在创建一个被忽略的属性(设置为字符串)。

在下面的示例中,您可以单击按钮并重新启用粘贴。

document.querySelector('button').addEventListener('click', function() {
    document.getElementById('password').removeAttribute('onpaste');
})
<input type="password" class="field" id="password" name="password" title="Enter your password" maxlength="50" onpaste="javascript:return false;" size="38" tabindex="2">
<button>Allow pasting</button>

$('#password').onpaste=""
$('#password').onpaste="javascript:return true;"

不是有效的函数。对于来自粘贴的触发事件,您必须编写这样的函数

$('#password').bind("paste", function(e) {
    callback();
});

但是您的问题的解决方案在这里 http://jsfiddle.net/9et20v36/,在按钮allow click功能中,我从允许粘贴文本的输入中删除onclick属性。

所以对于纯粹的JavaScript使用

document.getElementById('password').removeAttribute('onpaste');

或 jQuery 方式

$('#password').prop('onpaste', null);