최근에 양식 요소에 붙여 넣기를 마지 못해 비활성화해야했습니다. 이를 위해 Internet Explorer (및 기타) onpaste 이벤트 핸들러의 브라우저 간 * 구현을 작성했습니다. 내 솔루션은 타사 JavaScript 라이브러리와 독립적이어야했습니다.
여기에 제가 생각 해낸 것이 있습니다. 붙여 넣기를 완전히 비활성화하지는 않지만 (예를 들어 사용자가 한 번에 하나의 문자를 붙여 넣을 수 있음) 내 요구를 충족하고 keyCode 등을 처리 할 필요가 없습니다.
// 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, 일부 휴대 전화)가있는 사람이 페이지 / 앱을 사용할 수있는 경우 화면 키보드를 확인하기 위해 테스트 한 경우가 아니면이 스크립트를 사용하지 마세요. 각 키 선택 후 브라우저에 키를 보냅니다.