2011-01-17 13 views
16

मेरे पास एक टेक्स्टरेरा है और जब मैं इसमें क्लिक करता हूं तो मैं कैरेट को अंतिम चरित्र में ले जाना चाहता हूं, इसलिए Something[caret]जावास्क्रिप्ट: आखिरी चरित्र में देखभाल करें

function moveCaret(){ 
    // Move caret to the last character 
} 
<textarea onclick="moveCaret();"> 
    Something 
</textarea> 

जैसा कि मुझे पता है कि यह टेक्स्टरेंज ऑब्जेक्ट के साथ किसी भी तरह से संभव है, लेकिन मैं नहीं करता वास्तव में इसका उपयोग कैसे करें

संपादित करें: मुझे केवल शुद्ध जावास्क्रिप्ट समाधान देखना अच्छा लगेगा, इसलिए कोई पुस्तकालय कृपया नहीं।

+7

कृपया ऐसा नहीं करते हैं कि । यह ** नरक की तरह परेशान ** ** पाठ फ़ील्ड इस तरह की चीजें करते हैं। अगर मैं किसी निश्चित स्थिति पर क्लिक करता हूं तो मुझे उम्मीद है कि कर्सर इस स्थिति में होगा; कुछ स्थिति में साइट के डेवलपर पसंद नहीं आया। स्वचालित रूप से सभी सामग्रियों का चयन करना अधिक स्वीकार्य है जब तक कि इसे ध्यान में रखते समय तुरंत होता है। – ThiefMaster

+0

@ थिफमास्टर, सहमत हुए, हालांकि कभी-कभी अजीब चीजें होती हैं जिन्हें ठीक-ठीक नियंत्रण की आवश्यकता होती है। उदाहरण के लिए, प्लेसहोल्डर पॉलीफिल जो डमी प्लेसहोल्डर टेक्स्ट का इलाज करता है, वह मौजूद नहीं है। – KyleMit

उत्तर

40

निम्नलिखित समारोह दोनों textareas और पाठ इनपुट के लिए, सभी प्रमुख ब्राउज़रों में काम करेंगे:,

function moveCaretToEnd(el) { 
    if (typeof el.selectionStart == "number") { 
     el.selectionStart = el.selectionEnd = el.value.length; 
    } else if (typeof el.createTextRange != "undefined") { 
     el.focus(); 
     var range = el.createTextRange(); 
     range.collapse(false); 
     range.select(); 
    } 
} 

हालांकि, अगर तुम सच में ऐसा नहीं करना चाहिए जब भी उपयोगकर्ता पाठ क्षेत्र पर क्लिक करता है के बाद से उपयोगकर्ता नहीं होगा माउस के साथ देखभाल को स्थानांतरित करने में सक्षम हो। इसके बजाय, जब टेक्स्टटेरा फोकस प्राप्त करता है तो ऐसा करें। वहाँ भी क्रोम में एक समस्या है, जो चारों ओर से काम किया जा सकता है इस प्रकार है:

पूर्ण उदाहरण: http://www.jsfiddle.net/ghAB9/3/

HTML:

<textarea id="test">Something</textarea> 

स्क्रिप्ट:

var textarea = document.getElementById("test"); 
textarea.onfocus = function() { 
    moveCaretToEnd(textarea); 

    // Work around Chrome's little problem 
    window.setTimeout(function() { 
     moveCaretToEnd(textarea); 
    }, 1); 
}; 
+0

यह IE9 – vsync

+0

@vsync पर काम नहीं करता है: मैंने अभी आईई 9 में जेएसफ़िल्ड उदाहरण की कोशिश की और यह ठीक काम किया। आप क्या समस्या देख रहे हैं? –

+0

हो मेरे खराब! क्षमा करें, यह ठीक काम करता है :) – vsync

संबंधित मुद्दे