2010-02-03 13 views
11

में कितने अक्षरों को चिपकाया जा सकता है, यह निर्धारित करना संभव है कि HTML टेक्स्टरेरा में कितने वर्ण चिपकाए जा रहे हैं, और सीमा से परे पेस्ट को रद्द कर सकते हैं?टेक्स्टरेरा

संपादित करें: मैं जो करने की कोशिश कर रहा हूं वह उपयोगकर्ता को बड़ी संख्या में वर्णों (~ 3 मिलियन) चिपकाने से रोकता है क्योंकि यह कुछ ब्राउज़रों को क्रैश करता है। तो मैं अपने ब्राउजर लॉक होने से पहले पेस्ट को रद्द करना चाहता हूं। मैं एक दस्तावेज़ संपादक बना रहा हूं जहां उपयोगकर्ता इसे आजमाने की संभावना रखते हैं। लेकिन वे जितना चाहें उतना टाइप कर सकते हैं।

+0

आप वास्तव में उपयोगकर्ताओं को अपने ब्राउज़र को क्रैश करने से नहीं रोक सकते हैं, उन्हें हमेशा ऐसा करने का तरीका मिल जाएगा :-) – Bergi

उत्तर

11

आप इस तरह jQuery पर ऐसा कर सकते:

$(document).ready(function(){ 
function limits(obj, limit){ 

    var text = $(obj).val(); 
    var length = text.length; 
    if(length > limit){ 
     $(obj).val(text.substr(0,limit)); 
    } else { // alert the user of the remaining char. I do alert here, but you can do any other thing you like 
     alert(limit -length+ " characters remaining!"); 
    } 
} 


$('textarea').keyup(function(){ 

    limits($(this), 20); 
}) 

    }) 

एक डेमो here देखने।

+11

कुंजीपटल शॉर्टकट के साथ प्रतिलिपि/पेस्ट करते समय या जब उपयोगकर्ता सीधे बॉक्स में टाइप कर रहा होता है, तो उपयोगी होता है, लेकिन जब आप सही क्लिक और प्रासंगिक मेनू का उपयोग करके लंबे टेक्स्ट चिपकते हैं तो आप इसे कैसे करते हैं? – Gabriel

0

मैं jQuery का उपयोग करता हूं और टेक्स्टरेरा के लिए एक ईवेंट हैंडलर जोड़ता हूं। जब हैंडलर आग लगती है, तो गिनती करें और वांछित के रूप में प्रतिक्रिया दें।

+1

कोई रास्ता नहीं है - जहां तक ​​मुझे पता है - एक पेस्ट का पता लगाने और इसे सामान्य से अलग करना इनपुट। पेस्ट को हटाने का कोई तरीका नहीं है, सबसे अच्छा आप कर सकते हैं उन पात्रों को हटा दें जो टेक्स्टरेरा को सीमा से ऊपर ले जाएंगे। –

+0

टेक्स्ट क्षेत्र पर प्रत्येक ऑपरेशन का ट्रैक रखें, पिछले पाठ को कैश किया गया है (प्रत्येक कीप के लिए), यदि कोई पेस्ट सीमा पर जाने का कारण बनता है, तो इसे रीसेट करने के लिए पहले कैश किए गए संस्करण का उपयोग किया जाता है। इस मामले में सामान्य इनपुट और पेस्ट के बीच अंतर करने की आवश्यकता नहीं है। – Art

2

आईई में, आप onPaste ईवेंट का उपयोग कर सकते हैं। (MSDN documentation)

फ़ायरफ़ॉक्स, सफारी, ओपेरा और क्रोम में आप onInput ईवेंट (Dottoro.com reference) का उपयोग कर सकते हैं। यह घटना तब होती है जब चिपकाने सहित उपयोगकर्ता इंटरफ़ेस के माध्यम से तत्व की टेक्स्ट सामग्री बदल जाती है।

6
$("textarea").blur(function(event) { 
    var maxLength = 3000000; 
    var length = this.value.length; 
    if (length > maxLength) { 
     //reassign substring of max length to text area value 
     this.value = this.value.substring(0, maxLength); 
     alert(maxLength + ' characters allowed, excess characters trimmed'); 
    } 
}); 

यह jQuery textareas के लिए अनाम समारोह देता, इस पाठ ट्रिम और उपयोगकर्ता को सचेत करेंगे, तो आप भी कुंजी दबाने घटना में अटैच कर सकते हैं।

देखें: http://viralpatel.net/blogs/2008/12/set-maxlength-of-textarea-input-using-jquery-javascript.html उस पर और जानकारी के लिए।

2

आप जेएस के माध्यम से क्लिपबोर्ड सामग्री तक नहीं पहुंच सकते हैं, इसलिए आप इसे रोक नहीं सकते हैं। हालांकि, आपके पास तीन विकल्प हैं:

  1. उपयोगकर्ता को सामग्री पेस्ट करने की अनुमति न दें (यह यूएक्स के लिए वास्तव में एक बुरा विचार होगा)।
  2. पेस्ट की गई सामग्री को 0 से चिपकाए जाने के बाद चिपकने वाली सामग्री को सब्सट्रेट करने के लिए ऑनपेस्ट ईवेंट का उपयोग करें।
  3. जावास्क्रिप्ट/फ्लैश प्लगइन का उपयोग करें (यह मोबाइल उपकरणों पर काम नहीं करेगा)।
  4. एक एप्लेट या Silverlight का उपयोग करें (मैं इस एक पसंद नहीं है)

ये सिर्फ कुछ सुझाव हैं, और यदि आप एक और तरीका यह करने के लिए मिल जाए, मुझे यह बताएं।