2015-04-28 5 views
7

से पाठ पढ़ने पर बल पुनर्वितरण, डुप्लिकेट सुझाव है जहां मुझे इस प्रश्न का आधार मिला, इसलिए यह डुप्लिकेट नहीं है! तथ्य की बात के रूप में, मैं पहले से ही शुरू से ही उस सवाल से जुड़ा हुआ है ...फ़ाइल


अच्छा संपादित करें:

मैं एक JSFiddle (मेरी पहली बार :)) बनाया है। ध्यान दें कि पाठ की इच्छा कैसे विस्तारित नहीं होती है। टेक्स्टरेरा के अंदर कुछ टाइप करें और इसे तुरंत बदल दिया जाएगा।

यदि हम स्वचालित रूप से एक कुंजीपटल ईवेंट भेज सकते हैं, तो यह काम कर सकता है ... (this प्रासंगिक प्रश्न मदद नहीं करता है, उत्तरों का कोई प्रभाव नहीं पड़ा)।


मैं textarea उपयोग कर रहा हूँ के रूप में here से है। फिर, मैंने एक फाइल से पढ़ा और मैं सामग्री को टेक्स्टबॉक्स में डाल रहा हूं, लेकिन इसका आकार बदलना नहीं चाहिए जैसा कि इसे करना चाहिए।

function updateTextbox(text) { 
    $('#cagetextbox').val(text); 
}; 

कोई भी विचार:

मैं इस तरह पाठ बॉक्स को अद्यतन?

मैं उबंटू 12.04 में फ़ायरफ़ॉक्स 34.0 कैननिकल पर हूं, अगर यह कुछ भूमिका निभाता है, जो मुझे उम्मीद है कि यह मामला नहीं है, क्योंकि मेरे कुछ उपयोगकर्ता क्रोम का उपयोग करते हैं।


संपादित करें:

का प्रयास कुछ इस तरह लिखने के लिए होगा:

$('#cagetextbox').attr("rows", how many rows does the new text contain); 

ध्यान दें कि अगर हम find out how many lines of text the textarea शामिल करने की कोशिश है, हम एक जवाब के रूप में 1 मिल जाएगा।


EDIT_2

शायद width/(length_of_line * font_size) की तरह कुछ। कुछ परीक्षणों के लिए, यह सही लगता है, अगर मैंने 1 घटाया (केवल पाठ्यक्रम के परिणाम का पूर्णांक हिस्सा रखते हुए)।

this.baseScrollHeight 

यह केवल एक पाठ क्षेत्र पर 'फोकस' के बाद निर्धारित किया है:

+0

यह आम तौर पर यह के रूप में बड़ी के रूप में, का उपयोग करते हुए कहते हैं, 'चौड़ाई फिट होगा बनाने के लिए सबसे अच्छा है: 100%; ', और दे व्यूपोर्ट में ओवर-साइज्ड बॉक्स को जोखिम देने के बजाए टेक्स्ट भरना और स्क्रॉल करना आवश्यक है। – dandavis

+0

मैं इसे विभिन्न कारणों से @andavis के आकार बदलने योग्य रखना चाहता हूं, लेकिन टिप्पणी के लिए धन्यवाद। – gsamaras

+0

अच्छी तरह से, फ़ॉन्ट का उपयोग करने वाले पिक्सेल आकार को बताना मुश्किल है (ज़ूम, उपयोगकर्ता-प्रीफ़्स, ओएस, ओएस-टेक्स्ट-साइज, आदि के अधीन), जिसका अर्थ है कि 'cols = n' आकार का एकमात्र विश्वसनीय तरीका है यह ऊपर तो फिर आपको सबसे लंबी लाइन की चौड़ाई ढूंढनी होगी, और 'cols' attrib को उस पर सेट करें।' cagetextbox.cols = Math.max.apply (null, text.split ("\ n")। नक्शा (फ़ंक्शन (ए) {वापसी a.length;});; – dandavis

उत्तर

3

आपका पाठ क्षेत्र ऊंचाई खुद भी जब आप उस पर 'input.textarea' को गति प्रदान क्योंकि यह मान अपरिभाषित है अद्यतन नहीं किया।

मैं अपने कोड एक छोटा सा बदलाव कर दिया है: 'इनपुट'

$(document).on('input.textarea', '.autoExpand', function(){ 
     var minRows = this.getAttribute('data-min-rows')|0, 
      rows; 
     this.rows = minRows; 
     this.baseScrollHeight = this.baseScrollHeight | calcBaseScrollHeight(this); 
     rows = Math.ceil((this.scrollHeight - this.baseScrollHeight)/16); 
     this.rows = minRows + rows; 
    }); 

पर http://jsfiddle.net/n1c41ejb/4/

तो, और एक अलग कार्य करने के लिए baseScrollHeight गणना के लिए कदम

function calcBaseScrollHeight(textArea) { 
    var savedValue = textArea.value, 
     baseScrollHeight; 
    textArea.value = ''; 
    baseScrollHeight = textArea.scrollHeight; 
    textArea.value = savedValue; 
    return baseScrollHeight; 
} 

तो फोन अपने अद्यतन टेक्स्टबॉक्स इस तरह:

$('#cagetextbox').val(text).trigger('input.textarea'); 
+0

मैंने इसे 'से घटा दिया।पंक्तियां = minRows + पंक्तियां; 'और बहुत अच्छा लगता है! पिंजरे के खिलाड़ी भी आपको धन्यवाद देना चाहते हैं (हम वहां खेलते हैं, अधिक के लिए Google पिंजरे समर)। – gsamaras

+0

ध्यान दें कि यह एक आकर्षण की तरह काम करता है जब मैंने 'एचटीएमएल' भाग में दो 3 के साथ दो 3 में बदल दिया। – gsamaras

1

आप अपने मामले में एक टेक्स्टरेरा में तत्व की ऊंचाई समायोजित करने के लिए निम्न कोड का उपयोग कर सकते हैं। हालांकि यह एक लूप का उपयोग करता है, यह इस तरह से कई डिस्प्ले और स्क्रॉलिंग समस्याओं से बचाता है।

function autoheight(a) { 
    if (!$(a).prop('scrollTop')) { 
     do { 
      var b = $(a).prop('scrollHeight'); 
      var h = $(a).height(); 
      $(a).height(h - 5); 
     } 
     while (b && (b != $(a).prop('scrollHeight'))); 
    }; 
    $(a).height($(a).prop('scrollHeight')); 
} 
आप की तरह किसी भी घटनाओं पर

आकार।

$("#cagetextbox").on("keyup change", function (e) { 
    autoheight(this); 
}); 

और/या जब ईवेंट ट्रिगर नहीं होते हैं तो स्वचालित रूप से इसे स्वयं कॉल करें।

function updateTextbox(text) { 
    $('#cagetextbox').val(text); 
    autoheight($("#cagetextbox")); 
}; 

Fiddle

+0

पिंजरे के खिलाड़ी आपको बहुत धन्यवाद देते हैं (हम वहां खेलते हैं, और अधिक के लिए Google पिंजरे समर)। – gsamaras

+0

हालांकि, यह अच्छा आकार बदल रहा है जो इससे पहले बात कर रहा था। फिर भी, अच्छा प्रयास! – gsamaras

+0

मुझे खेद है, कौन सा आकार बदल रहा है? साथ ही, मध्य में पाठ को टेक्स्ट में दर्ज करने या पाठ में शुरू करने का प्रयास करें और एक दूसरे जवाब में, कम से कम क्रोम में कर्सर की स्थिति अन्य पहेली में निर्धारित नहीं होती है। – Thaylon

1

मैं एक काम बेला बनाया। यह एक इनपुट टेक्स्टफील्ड बनाता है जैसे कि यह गैर संपादन योग्य div में प्रदर्शित किया गया था।

https://jsfiddle.net/khgk7nt5/2/

उदाहरण सीएसएस

.test{ 
    font-family:"Times New Roman", Times, serif; 
    font-color:#CCCCCC; 
    font-size:20px; 
    width:300px; 
} 
.testLoc{ 
    position:absolute; 
    top:-1000px; 
} 

जावास्क्रिप्ट

var testText = "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore" 

var test = $("<div/>"); 
test.addClass("test testLoc"); 
test.text(testText); 
$("body").append(test); 

var out = $("<textarea/>"); 
out.addClass("test"); 
out.width(test.width()); 
out.height(test.height()); 
out.val(testText); 
$("body").append(out); 
test.remove(); 
+0

धन्यवाद, मुझे यह दिमाग में होगा। ;) – gsamaras

+0

निश्चित रूप से, खेद है कि मैं अपनी खुद की चीजों पर काम कर एक पहेली को तेज नहीं कर सका। आपकी परियोजना के लिए शुभकामनाएं। :) – Radio

+0

कोई समस्या नहीं, आपको मेरा +1 मिल गया! – gsamaras