मुझे हाल ही में एक फार्म तत्व में चिपकाने को निष्क्रिय करना पड़ा। ऐसा करने के लिए, मैंने एक क्रॉस-ब्राउज़र * इंटरनेट एक्सप्लोरर के कार्यान्वयन (और अन्य ') ऑनस्पॉट ईवेंट हैंडलर लिखा। मेरा समाधान किसी भी तृतीय-पक्ष जावास्क्रिप्ट पुस्तकालयों से स्वतंत्र होना था।
यहाँ मैं क्या लेकर आया हूँ। यह चिपकाने को पूरी तरह से अक्षम नहीं करता है (उपयोगकर्ता एक समय में एक ही चरित्र को उदाहरण के लिए पेस्ट कर सकता है), लेकिन यह मेरी जरूरतों को पूरा करता है और कीकोड से निपटने के लिए बचा जाता है, आदि।
// 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। इन सभी ब्राउज़रों में से, ओपेरा केवल ऑन्पेस्ट का समर्थन नहीं करता है, लेकिन यह ऑनिनपुट का समर्थन करता है।
नोट: यह एक कंसोल या अन्य सिस्टम पर काम नहीं करेगा जो ऑन-स्क्रीन कीबोर्ड का उपयोग करता है (यह मानते हुए कि ऑन-स्क्रीन कीबोर्ड ब्राउज़र की चाबियाँ नहीं भेजता है जब प्रत्येक कुंजी का चयन किया जाता है)। यदि यह संभव है कि आपका पृष्ठ / ऐप ऑन-स्क्रीन कीबोर्ड और ओपेरा (जैसे: Nintendo Wii, कुछ मोबाइल फोन) के साथ किसी द्वारा उपयोग किया जा सकता है, तो इस स्क्रिप्ट का उपयोग न करें जब तक कि आपने ऑन-स्क्रीन कीबोर्ड सुनिश्चित करने के लिए परीक्षण नहीं किया हो प्रत्येक कुंजी चयन के बाद ब्राउज़र को चाबियाँ भेजता है।