栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

禁用将文本粘贴到HTML表单中

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

禁用将文本粘贴到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 < inputs.length; i++) { fields.push(inputs[i]);        }        for (var i = 0; i < textareas.length; i++) { fields.push(textareas[i]);        }        for (var i = 0; i < fields.length; 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);     } }        }    }})();

要使用此功能来禁用粘贴:

<input type="text" onpaste="return false;" />

*我知道oninput并不是W3C DOM规范的一部分,但是我测试过此代码的所有浏览器(Chrome 2,Safari 4,Firefox 3,Opera 10,IE6,IE7)都支持oninput或onpaste。在所有这些浏览器中,只有Opera不支持onpaste,但支持oninput。

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464590.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号