html input禁止粘贴,禁止将文本粘贴到HTML表单中

我最近不得不勉强禁用表单元素中的粘贴。为此,我编写了Internet Explorer(和其他人)onpaste事件处理程序的跨浏览器*实现。我的解决方案必须独立于任何第三方JavaScript库。

这就是我想出来的。它不会完全禁用粘贴(例如,用户可以一次粘贴一个字符),但它符合我的需要并避免必须处理keyCodes等。// Register onpaste on inputs and textareas in browsers that don't// natively support it.(function () {

var onload = window.onload;

window.onload = function () {

if (typeof onload == "function") {

onload.apply(this, arguments);

}

var fields = [];

var inputs = document.getElementsByTagName("input");

var textareas = document.getElementsByTagName("textarea");

for (var i = 0; i 

fields.push(inputs[i]);

}

for (var i = 0; i 

fields.push(textareas[i]);

}

for (var i = 0; i 

var field = fields[i];

if (typeof field.onpaste != "function" && !!field.getAttribute("onpaste")) {

field.onpaste = eval("(function () { " + field.getAttribute("onpaste") + " })");

}

if (typeof field.onpaste == "function") {

var oninput = field.oninput;

field.oninput = function () {

if (typeof oninput == "function") {

oninput.apply(this, arguments);

}

if (typeof this.previousValue == "undefined") {

this.previousValue = this.value;

}

var pasted = (Math.abs(this.previousValue.length - this.value.length) > 1 && this.value != "");

if (pasted && !this.onpaste.apply(this, arguments)) {

this.value = this.previousValue;

}

this.previousValue = this.value;

};

if (field.addEventListener) {

field.addEventListener("input", field.oninput, false);

} else if (field.attachEvent) {

field.attachEvent("oninput", field.oninput);

}

}

}

}})();

要使用它来禁用粘贴:

*我知道oninput不是W3C DOM规范的一部分,但是我已经用Chrome-2,Safari 4,Firefox 3,Opera 10,IE6,IE7测试这些代码的所有浏览器都支持oninput或onpaste。在所有这些浏览器中,只有Opera不支持onpaste,但它确实支持oninput。

注意:这不适用于使用屏幕键盘的控制台或其他系统(假设在选择每个键时屏幕键盘不会向浏览器发送键)。如果您的页面/应用程序可能被屏幕键盘和Opera(例如:Nintendo Wii,某些手机)使用,请不要使用此脚本,除非您已经过测试以确保屏幕键盘在每个键选择后将密钥发送到浏览器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值