如何在javascript中替换onpaste函数?

时间:2015-06-19 13:05:25

标签: javascript jquery

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

<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;"

我做错了什么?

3 个答案:

答案 0 :(得分:2)

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

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

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>

答案 1 :(得分:2)

问题是您正在尝试将jQuery与常规JavaScript结合使用。您可以使用纯JavaScript来删除onpaste侦听器。

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

如果您想使用jQuery,可以使用:

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

会产生相同的结果。

答案 2 :(得分:1)

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

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

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

但问题的解决方案是http://jsfiddle.net/9et20v36/,在按钮click的{​​{1}}函数中,我从输入中删除allow属性,允许粘贴文字。

所以对于纯JavaScript使用

onclick

或jQuery方式

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