জিকুয়েরি ব্যবহার করে একটি টেক্সারিয়া স্বয়ংক্রিয়ভাবে প্রসারিত করুন


128

আমি কীভাবে টেক্সারিয়াকে জিকুয়ারি ব্যবহার করে স্বয়ংক্রিয়ভাবে প্রসারিত করতে পারি?

সভার এজেন্ডা ব্যাখ্যা করার জন্য আমার কাছে একটি পাঠ্যবাক্স রয়েছে, তাই যখন আমার এজেন্ডার পাঠ্যটি সেই পাঠ্যবক্সের ক্ষেত্রটি বাড়তে থাকে তখন আমি সেই পাঠ্যবাক্সটি প্রসারিত করতে চাই।


আমি থিক টেক্সারিয়া অটো এক্সপেন্ডেবল।
অ্যান্ড্রু সুলিভান


দয়া করে আপনার প্রশ্নটি পরিবর্তন এবং "jQuery" শব্দটি সরিয়ে ফেলার বিষয়ে বিবেচনা করুন
vsync

উত্তর:


113

আমি প্রচুর চেষ্টা করেছি এবং এটি দুর্দান্ত। লিঙ্কটি মারা গেছে। আরও নতুন সংস্করণ এখানে পাওয়া যায় । পুরানো সংস্করণ জন্য নীচে দেখুন।
আপনি টেক্সটরিয় এন্টার কী টিপুন এবং ধরে রেখে চেষ্টা করতে পারেন। অন্যান্য অটো প্রসারিত টেক্সারিয়া প্লাগইনের সাথে এফেক্টটির তুলনা করুন ....

মন্তব্যের ভিত্তিতে সম্পাদনা করুন

$(function() {
   $('#txtMeetingAgenda').autogrow();
});

দ্রষ্টব্য: আপনার প্রয়োজনীয় জেএস ফাইলগুলি অন্তর্ভুক্ত করা উচিত ...

সম্প্রসারণ / সংকোচন থাকাকালীন & বন্ধ ঝলকানি থেকে পাঠ্য এলাকা মধ্যে স্ক্রলবার প্রতিরোধ করার জন্য, আপনি সেট করতে পারেন overflowকরার hiddenপাশাপাশি:

$('#textMeetingAgenda').css('overflow', 'hidden').autogrow()




হালনাগাদ:

উপরের লিঙ্কটি নষ্ট হয়ে গেছে। তবে আপনি এখানে জাভাস্ক্রিপ্ট ফাইলগুলি পেতে পারেন ।


যদি আমার পাঠ্যবাক্স আইডি কি txtMeetingAgenda তারপর আমি কিভাবে অটো পাঠ্য এলাকা সম্পত্তি jQuery মধ্যে বাস্তবায়ন করতে পারে
পীযূষ

এখানে ক্লিক ইভেন্ট সংজ্ঞায়িত বা না
পিয়ুশ

এগুলি সবই টেক্সেরিয়া সম্পর্কিত তবে পাঠ্যবক্সের কী হবে? এই প্লাগইনটি পাঠ্যবাক্সের জন্যও কাজ করে?
পিয়ুশ

1
এই প্লাগ-ইন ভাল কাজ না করে, চেষ্টা স্বয়ংক্রিয়-আকৃতি, এটা পথ ভাল
julesbou

টেক্সেরিয়া বাড়ার সাথে সাথে এটি কেবলমাত্র একভাবে কার্যকর হয়। আপনি যখন পাঠ্যটি মুছতে শুরু করবেন তখন এটি স্বয়ংক্রিয়ভাবে উচ্চতা হ্রাস করবে না।
ekashking

166

আপনি যদি একটি প্লাগইন চান না তবে একটি খুব সহজ সমাধান রয়েছে

$("textarea").keyup(function(e) {
    while($(this).outerHeight() < this.scrollHeight + parseFloat($(this).css("borderTopWidth")) + parseFloat($(this).css("borderBottomWidth"))) {
        $(this).height($(this).height()+1);
    };
});

এটি একটি জেএসফিডে কাজ করে দেখুন আমি এখানে অন্য পাঠ্য প্রশ্নের উত্তর দেই

এটি বিপরীতে করা বা পাঠ্য অপসারণ হওয়ায় এটি আরও ছোট করে তোলার প্রশ্নের উত্তর দিতে: jsFizz

এবং আপনি যদি একটি প্লাগইন চান

@ জেসন এখানে একটি ডিজাইন করেছেন


1
আমি + parseFloat ($ (এই) সিএসএস ( "borderTopWidth")) + + parseFloat ($ (এই) সিএসএস ( "borderBottomWidth")) কে সরানো ছিল, অন্যথায় এটা অসীম একটি পাঠ্য এলাকা বুটস্ট্র্যাপ শৈলী সঙ্গে loops
blacelle

3
if (this.clientHeight < this.scrollHeight) { this.style.height = this.scrollHeight + 'px'; }
jQuery-

3
@ মেটাকুংফু ঠিক তেমন ডাউনভোটিংয়ের পরিবর্তে, আপনি উত্তরটি উন্নত করতে সাহায্য করতে পারেন। আমার কাছে উইন্ডোজের জন্য অ্যাপল ক্রেপ এটিএম এবং সাফারি পরীক্ষার কোনও উপায় নেই দীর্ঘদিন আগে বন্ধ ছিল। সুতরাং কেন এটি কাজ করবে না তা নির্ধারণ করার জন্য আমি সত্যিই কিছু করতে পারি না। কোড-ভিত্তিক, এই সমাধানটিতে কোনও ভুল নেই। আপনি কি নিশ্চিত যে এটি কোডটি ভেঙে গেছে এবং সাফারিটি জেএসফিডলে ভেঙে যাচ্ছে না? সাফারি বেশ পিক এবং ফিডাল কেবল একটি বড় আপডেটের মধ্য দিয়ে যায়। ময়েব আপনি ডেভ কন খুলতে পারেন এবং আরও কিছু বিশদ সরবরাহ করতে পারেন?
SpYk3HH

1
ফ্ল্যাশিং স্ক্রোল রোধ করতে
টেক্সারিয়া

2
যদি আমি যুক্ত সারিগুলি সরিয়ে নিতে চাই তবে পাঠ্যবাক্সের বর্ধিত আকারটি একই থাকে, এটিও কি স্বয়ংক্রিয়ভাবে ফিরে আকার পরিবর্তন করতে পারে?
স্টিভেন

33

প্রসারিত / সঙ্কুচিত পাঠ্য। এই ডেমোটি ইভেন্ট বন্ডিংয়ের জন্য jQuery ব্যবহার করে, তবে এটি কোনওভাবেই আবশ্যক নয়।
( কোন আইই সমর্থন নয় - আইই সারি বৈশিষ্ট্য পরিবর্তন সাড়া দেয় না )

ডেমো পৃষ্ঠা


এইচটিএমএল

<textarea class='autoExpand' rows='3' data-min-rows='3' placeholder='Auto-Expanding Textarea'></textarea>

সিএসএস

textarea{  
  display:block;
  box-sizing: padding-box;
  overflow:hidden;

  padding:10px;
  width:250px;
  font-size:14px;
  margin:50px auto;
  border-radius:8px;
  border:6px solid #556677;
}

জাভাস্ক্রিপ্ট (আপডেট)

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

2
কারণ আপনার
পাঠ্য

1
আমি দেখতে পাই যে কোনও উত্স থেকে পাঠ্যটি অনুলিপি করা হলে (সিটিআরএল + ভি) সমাধানটি নষ্ট হয়ে যায়। যখন পাঠ্যটি ম্যানুয়ালি টাইপ করা থাকে - এটি দুর্দান্ত এবং খুব মসৃণ।
সত্য কল্লুরী

1
@vsync: আপনি একাধিক পাঠ্য অঞ্চলের জন্য কীভাবে পরিবর্তন করবেন? অর্থাৎ আপনার কাছে টেক্সারিয়া 1 এবং টেক্সারিয়া 2 রয়েছে এবং আপনি উভয়কে বাড়তে দিয়েছিলেন?
jmoreno

1
এটি শীর্ষ উত্তর হতে হবে! আমি একটি প্রশ্ন উপর ভিত্তি পোস্ট যদি কেউ আগ্রহী হয়: stackoverflow.com/questions/29930300/...
gsamaras

1
@ অ্যালিমুরি - আমি এখন গিয়ে 16 এ আপডেট করেছি কারণ এটি আরও ভাল ফলাফল বলে মনে হচ্ছে। এবং হ্যাঁ, এটি প্রত্যাশিত লাইনের উচ্চতা
vsync


20

আপনি এটি চেষ্টা করতে পারেন

$('#content').on('change keyup keydown paste cut', 'textarea', function () {
        $(this).height(0).height(this.scrollHeight);
    }).find('textarea').change();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="content">
  <textarea>How about it</textarea><br />
  <textarea rows="5">111111
222222
333333
444444
555555
666666</textarea>
</div>


যদি আপনি $ (এটি) থেকে স্ক্রোলহাইট পেতে চান তবে আপনি $ (এটি) .প্রপ ('স্ক্রোলহাইট') ব্যবহার করতে পারেন; পরিবর্তে;)
স্যামুয়েল ভিসেন্ট

3
এটি প্রতিটি লাইন বিরতিতে জ্বলজ্বল করে
জো

11

স্পাইকি 3 এইচএচকে ধন্যবাদ, আমি তার সমাধান দিয়ে শুরু করে এটিকে এই দ্রবণে পরিণত করেছি, যা সঙ্কুচিত কার্যকারিতা যুক্ত করে এবং আরও সহজ এবং দ্রুততর, আমি অনুমান করি।

$("textarea").keyup(function(e) {
    $(this).height(30);
    $(this).height(this.scrollHeight + parseFloat($(this).css("borderTopWidth")) + parseFloat($(this).css("borderBottomWidth")));
});

বর্তমান ক্রোম, ফায়ারফক্স এবং অ্যান্ড্রয়েড ২.৩.৩ ব্রাউজারে পরীক্ষিত।

আপনি কয়েকটি ব্রাউজারে স্ক্রোল বারগুলির ঝলক দেখতে পাচ্ছেন। এটি সমাধান করতে এই সিএসএস যুক্ত করুন।

textarea{ overflow:hidden; }

এটি মোটেও ভাল কাজ করে না: / আমি যে প্রতিটি চরিত্র টাইপ করি এটি উচ্চতা যুক্ত করে।
vsync

1
এটা আমার জন্য নিখুঁত কাজ করে! আপনি যা বলছেন তা করে তা করার জন্য সাধারণ কোডটিতে অবশ্যই কিছু নেই।
২ro

1
হ্যাঁ আমি এটি এখনই দেখছি, আপনার কোডটিতে অবশ্যই লাইন থাকা উচিত যা উচ্চতাটি প্রাথমিকভাবে 30 এ সেট করে। এটি সম্ভবত একটি অপ্রয়োজনীয় ইলিন কারণ এটি বিকাশকারীকে কোডটি বোঝার জন্য এবং
টেক্সেরিয়াকে

1
এটা ভুল। বিকাশকারীকে কোডটি টুইট করার দরকার নেই। 30 উচ্চতা নির্ধারণ করা প্রয়োজন এবং এটি সমস্ত কিছুর জন্য কাজ করে। ব্যবহারকারী কখনই তা ঘটতে দেখে না। এভাবেই এটি টেক্সারিয়া সঙ্কুচিত করতে সক্ষম। কোডটি টেক্সারিয়াকে বোঝে এবং মানিয়ে যায়। এটাই মূল বিন্দু।
শ্রোলেক্স

আপনি সঠিক. ডেমো পৃষ্ঠা: jsbin.com/ObEcoza/2/edit (উচ্চতা সেট 1pxকরা ভাল বলে মনে হচ্ছে)
vsync

10

একটি স্বয়ংক্রিয় প্রসারণযোগ্য টেক্সেরিয়া সংজ্ঞায়িত করতে আপনাকে দুটি জিনিস করতে হবে:

  1. একবার আপনি এর ভিতরে কী টিপুন বা ক্লিক করুন একবারে এটির প্রসারিত করুন বা এক লাইনের চেয়ে বেশি সামগ্রী লিখুন।
  2. আর সঙ্কুচিত (ব্লার এ ব্যবহারকারী শ্বেত স্পেস প্রবেশ করেছে যদি আসল আকার জন্য। বোনাস )

এখানে কাজটি সম্পাদনের জন্য একটি হস্তনির্মিত ফাংশন is

প্রায় সমস্ত ব্রাউজার (<আই 7) এর সাথে দুর্দান্ত কাজ করা । পদ্ধতিটি এখানে:

    //Here is an event to get TextArea expand when you press Enter Key in it.
    // intiate a keypress event
    $('textarea').keypress(function (e) {  
       if(e.which == 13)   {   
       var control = e.target;                     
       var controlHeight = $(control).height();          
      //add some height to existing height of control, I chose 17 as my line-height was 17 for the control    
    $(control).height(controlHeight+17);  
    }
    }); 

$('textarea').blur(function (e) {         
    var textLines = $(this).val().trim().split(/\r*\n/).length;      
    $(this).val($(this).val().trim()).height(textLines*17);
    });

এখানে এই সম্পর্কে একটি পোস্ট।


6

আমি ভাল ফলাফলের আগে টেক্সারিয়া এক্সপেন্ডার jQuery প্লাগইন ব্যবহার করেছি ।


1
একটি পাঠ্য বাক্স (আমি অনুমান করি যে ইনপুট পাঠ্য উপাদান) আমি বহুমুখী নয়। একটি টেক্সারিয়া ব্যবহার করুন তবে এটি যথাযথভাবে স্টাইল করুন - সারি, কলামগুলি এবং তারপরে উপরের মতো অটো-গ্রোড প্লাগইন ব্যবহার করুন।
সমৃদ্ধ

4

প্রত্যেকের এই jQuery প্লাগইনটি ব্যবহার করা উচিত: xautoresize-jquery । এটি সত্যই ভাল এবং আপনার সমস্যার সমাধান করা উচিত।


এটি আমাকে সেরা ফলাফল দিয়েছে এবং এটি প্রয়োগ করাও সহজ।
blitzkid

4
function autosize(textarea) {
    $(textarea).height(1); // temporarily shrink textarea so that scrollHeight returns content height when content does not fill textarea
    $(textarea).height($(textarea).prop("scrollHeight"));
}

$(document).ready(function () {
    $(document).on("input", "textarea", function() {
        autosize(this);
    });
    $("textarea").each(function () {
        autosize(this);
    });
});

(এটি ইন্টারনেটের এক্সপ্লোরার 9 বা ততোধিক বয়স্কে কাজ করবে না কারণ এটি inputইভেন্টটি ব্যবহার করে )


আমার প্রকল্পে, যেমন আমি জাকুরি এবং টাইপসক্রিপ্ট দ্বারা পৃষ্ঠাটিতে পুরো জিনিসটি উপস্থাপন করছি, আপনার সমাধানটিই আমার সমস্যার সমাধান করার একমাত্র উপায় ছিল ধন্যবাদ
হ্যারি সরশহোগ

3

আমি কেবল পৃষ্ঠা লোডে টেক্সেরিয়াস প্রসারিত করতে এই ফাংশনটি তৈরি করেছি। কেবলমাত্র পরিবর্তন eachকরুন keyupএবং পাঠ্যরিয়াটি টাইপ করা হলে এটি ঘটবে।

// On page-load, auto-expand textareas to be tall enough to contain initial content
$('textarea').each(function(){
    var pad = parseInt($(this).css('padding-top'));
    if ($.browser.mozilla) 
        $(this).height(1);
    var contentHeight = this.scrollHeight;
    if (!$.browser.mozilla) 
        contentHeight -= pad * 2;
    if (contentHeight > $(this).height()) 
        $(this).height(contentHeight);
});

Chrome, IE9 এবং ফায়ারফক্সে পরীক্ষিত। দুর্ভাগ্যক্রমে ফায়ারফক্সে এই বাগ রয়েছে যা এর জন্য ভুল মান প্রদান করে scrollHeight, সুতরাং উপরের কোডটিতে এটির জন্য একটি (হ্যাকি) কাজ রয়েছে।


3

আমি রিগেলের (স্বীকৃত উত্তর) প্রদত্ত উত্তরে কয়েকটি বাগ ঠিক করেছি:

  1. এইচটিএমএল সত্তাগুলি এখন যে ক্রমে প্রতিস্থাপন করা হয়েছে তা ছায়া উপাদানটিতে অপ্রত্যাশিত কোড তৈরি করে না। (মূলটি ">" দ্বারা "& ampgt;" প্রতিস্থাপন করা হয়েছে, কিছু বিরল ক্ষেত্রে উচ্চতার ভুল গণনা ঘটায়)।
  2. যদি পাঠ্যটি একটি নতুন লাইন দিয়ে শেষ হয়, তবে ছায়া এখন একটি অতিরিক্ত যুক্ত অক্ষর পাবে, পরিবর্তে মূলের ক্ষেত্রে যেমন উচ্চতা থাকবে "#"।
  3. আরম্ভের পরে টেক্সেরিয়াকে পুনরায় আকার দেওয়া ছায়ার প্রস্থকে আপডেট করে।
  4. যুক্ত শব্দ-মোড়ানো: ছায়ার জন্য বিরতি শব্দ, সুতরাং এটি একটি টেক্সারিয়ার মতোই ব্রেক হয় (খুব দীর্ঘ শব্দের জন্য বিরতি জোর করে)

শূন্যস্থান সংক্রান্ত কিছু বাকি সমস্যা রয়েছে। আমি ডাবল স্পেসের কোনও সমাধান দেখতে পাচ্ছি না, এগুলি ছায়ায় একক স্পেস হিসাবে প্রদর্শিত হবে (এইচটিএমএল রেন্ডারিং)। & Nbsp; ব্যবহার করে এটি বপন করা যাবে না, কারণ স্পেসগুলি ভাঙা উচিত। এছাড়াও, টেক্সেরিয়া কোনও স্থানের পরে একটি লাইন ভেঙে দেয়, যদি সেই জায়গার জন্য কোনও স্থান না থাকে তবে এটি পূর্ব বিন্দুতে লাইনটি ভেঙে দেবে। পরামর্শ স্বাগত জানাই।

সংশোধিত কোড:

(function ($) {
    $.fn.autogrow = function (options) {
        var $this, minHeight, lineHeight, shadow, update;
        this.filter('textarea').each(function () {
            $this = $(this);
            minHeight = $this.height();
            lineHeight = $this.css('lineHeight');
            $this.css('overflow','hidden');
            shadow = $('<div></div>').css({
                position: 'absolute',
                'word-wrap': 'break-word',
                top: -10000,
                left: -10000,
                width: $this.width(),
                fontSize: $this.css('fontSize'),
                fontFamily: $this.css('fontFamily'),
                lineHeight: $this.css('lineHeight'),
                resize: 'none'
            }).appendTo(document.body);
            update = function () {
                shadow.css('width', $(this).width());
                var val = this.value.replace(/&/g, '&amp;')
                                    .replace(/</g, '&lt;')
                                    .replace(/>/g, '&gt;')
                                    .replace(/\n/g, '<br/>')
                                    .replace(/\s/g,'&nbsp;');
                if (val.indexOf('<br/>', val.length - 5) !== -1) { val += '#'; }
                shadow.html(val);
                $(this).css('height', Math.max(shadow.height(), minHeight));
            };
            $this.change(update).keyup(update).keydown(update);
            update.apply(this);
        });
        return this;
    };
}(jQuery));

3

আকার সঙ্কুচিত করার জন্য সংযোজন সহ SpYk3HH এর কোড।

function get_height(elt) {
    return elt.scrollHeight + parseFloat($(elt).css("borderTopWidth")) + parseFloat($(elt).css("borderBottomWidth"));
}

$("textarea").keyup(function(e) {
    var found = 0;
    while (!found) {
        $(this).height($(this).height() - 10);
        while($(this).outerHeight() < get_height(this)) {
            $(this).height($(this).height() + 1);
            found = 1;
        };
    }
});

আমার উত্তর কি তোমার আগে দেখেছ?
শ্রোলেক্স

1
আপনার সমাধানটি আমার পক্ষে মানায় না, কিছু ত্রুটি ছিল, কোনটি আমার মনে নেই।
ডিএসবি্লিজার্ড

2

এটি আমার পক্ষে আরও ভালভাবে কাজ করেছে:

$('.resiText').on('keyup input', function() { 
$(this).css('height', 'auto').css('height', this.scrollHeight + (this.offsetHeight - this.clientHeight));
});
.resiText {
    box-sizing: border-box;
    resize: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea class="resiText"></textarea>


2

লোকেরা মনে হয় খুব বেশি সমাধান কাজ করেছে ...

আমি এটি এইভাবে করি:

  $('textarea').keyup(function()
  {
    var 
    $this  = $(this),
    height = parseInt($this.css('line-height'),     10),
    padTop = parseInt($this.css('padding-top'),     10),
    padBot = parseInt($this.css('padding-bottom'),  10);

    $this.height(0);

    var 
    scroll = $this.prop('scrollHeight'),
    lines  = (scroll  - padTop - padBot) / height;

    $this.height(height * lines);
  });

এটি দীর্ঘ লাইনের পাশাপাশি লাইন ব্রেকগুলির সাথেও কাজ করবে .. বৃদ্ধি এবং সঙ্কুচিত হবে ..


1

আমি এই jquery ফাংশন লিখেছি যা কাজ করে বলে মনে হচ্ছে।

যদিও আপনাকে সিএসএসে ন্যূনতম উচ্চতা নির্দিষ্ট করতে হবে এবং আপনি যদি কিছু কোডিং না করতে চান তবে এটি দুটি সংখ্যা দীর্ঘ হওয়া দরকার। অর্থাত্ 12px;

$.fn.expand_ta = function() {

var val = $(this).val();
val = val.replace(/</g, "&lt;");
val = val.replace(/>/g, "&gt;");
val += "___";

var ta_class = $(this).attr("class");
var ta_width = $(this).width();

var min_height = $(this).css("min-height").substr(0, 2);
min_height = parseInt(min_height);

$("#pixel_height").remove();
$("body").append('<pre class="'+ta_class+'" id="pixel_height" style="position: absolute; white-space: pre-wrap; visibility: hidden; word-wrap: break-word; width: '+ta_width+'px; height: auto;"></pre>');
$("#pixel_height").html(val);

var height = $("#pixel_height").height();
if (val.substr(-6) == "<br />"){
    height = height + min_height;
};
if (height >= min_height) $(this).css("height", height+"px");
else $(this).css("height", min_height+"px");
}

1

রিগেল পোস্ট হওয়া প্লাগইনটি যে কেউ ব্যবহার করছে তাদের জন্য দয়া করে সচেতন হন যে এটি ইন্টারনেট এক্সপ্লোরার-এ পূর্বাবস্থায় ফিরিয়ে আনতে সক্ষম করবে (ডেমোটিতে যেতে দিন)।

এটি যদি আপনার সমস্যা হয় তবে আমি পরিবর্তে @ রিচসেজে পোস্ট হওয়া প্লাগইনটি ব্যবহার করার পরামর্শ দেব কারণ এটি এই সমস্যায় ভুগছেন না। আরও তথ্যের জন্য চূড়ান্ত আকার পরিবর্তনকারী পাঠেরিয়া অনুসন্ধানের দ্বিতীয় বুলেট পয়েন্টটি দেখুন।



1

আমি অ্যানিমেশন এবং স্বয়ংক্রিয় সঙ্কুচিত চেয়েছিলাম। সংমিশ্রণটি দৃশ্যত শক্ত, কারণ লোকেরা এর জন্য বেশ তীব্র সমাধান নিয়ে আসে। আমি এটিকে বহু-পাঠ্য-প্রমাণও করেছি। এবং এটি jQuery প্লাগইনের মতো হাস্যকরভাবে ভারী নয়।

আমি নিজেকে vsync এর উত্তরের উপর ভিত্তি করে তৈরি করেছি (এবং তিনি এর জন্য যে উন্নতি করেছেন), http://codepen.io/anon/pen/vlIwj আমার উন্নতির কোডেকেন।

এইচটিএমএল

<textarea class='autoExpand' rows='3' data-min-rows='3' placeholder='Auto-Expanding Textarea'></textarea>

সিএসএস

body{ background:#728EB2; }

textarea{  
  display:block;
  box-sizing: padding-box;
  overflow:hidden;

  padding:10px;
  width:250px;
  font-size:14px;
  margin:50px auto;
  border-radius:8px;
  border:6px solid #556677;
  transition:all 1s;
  -webkit-transition:all 1s;
}

জাতীয়

var rowheight = 0;

$(document).on('input.textarea', '.autoExpand', function(){
    var minRows = this.getAttribute('data-min-rows')|0,
        rows    = this.value.split("\n").length;
    $this = $(this);
    var rowz = rows < minRows ? minRows : rows;
    var rowheight = $this.attr('data-rowheight');
    if(!rowheight){
      this.rows = rowz;
      $this.attr('data-rowheight', (this.clientHeight  - parseInt($this.css('padding-top')) - parseInt($this.css('padding-bottom')))/ rowz);
    }else{
      rowz++;
      this.style.cssText = 'height:' + rowz * rowheight + 'px'; 
    }
});

দ্রষ্টব্য: আমি লক্ষ্য করেছি যে এটি কখনও কখনও বক্স-আকার দেওয়ার: সামগ্রী-বাক্সের সাথে আরও ভাল কাজ করে। যদিও আমি পুরোপুরি নিশ্চিত নই কেন, এটি সঠিকভাবে প্যাডিংয়ের প্রক্রিয়া করা উচিত :(
লোডেভিজক

1

এর জন্য অনেক উত্তর রয়েছে তবে আমি খুব সাধারণ কিছু পেয়েছি, একটি কিপ ইভেন্টটি টেক্সারিয়ায় সংযুক্ত করুন এবং কী কী টিপুন টিপুন কী কোডটি 13 টিপুন

keyPressHandler(e){ if(e.keyCode == 13){ e.target.rows = e.target.rows + 1; } }

এটি আপনার পাঠ্যকে আর একটি সারি যুক্ত করবে এবং আপনি CSS ব্যবহার করে প্রস্থকে স্টাইল করতে পারবেন।


1

ধরা যাক আপনি নকআউট ব্যবহার করে এটি সম্পাদন করার চেষ্টা করছেন ... এখানে কীভাবে:

পৃষ্ঠায়:

<textarea data-bind="event: { keyup: $root.GrowTextArea }"></textarea>

মডেল দেখুন:

self.GrowTextArea = function (data, event) {
    $('#' + event.target.id).height(0).height(event.target.scrollHeight);
}

আমার মতো নকআউট ফরচ দ্বারা তৈরি করা আপনার একাধিক টেক্সারিয়াস থাকলেও এটি কাজ করা উচিত।



1

সহজ সমাধান:

এইচটিএমএল:

<textarea class="auto-expand"></textarea>

CSS:

.auto-expand {
    overflow:hidden;
    min-height: 80px;
}

জেএস (জ্যাকুরি):

$(document).ready(function () {
 $("textarea.auto-expand").focus(function () {
        var $minHeight = $(this).css('min-height');
        $(this).on('input', function (e) {
            $(this).css('height', $minHeight);
            var $newHeight = $(this)[0].scrollHeight;
            $(this).css('height', $newHeight);
        });
    });       
});

1

খাঁটি জেএস সহ সমাধান

function autoSize() {
  if (element) {
    element.setAttribute('rows', 2) // minimum rows
    const rowsRequired = parseInt(
      (element.scrollHeight - TEXTAREA_CONFIG.PADDING) / TEXTAREA_CONFIG.LINE_HEIGHT
    )
    if (rowsRequired !== parseInt(element.getAttribute('rows'))) {
      element.setAttribute('rows', rowsRequired)
    }
  }
}

https://jsfiddle.net/Samb102/cjqa2kf4/54/


1

এই সমাধানটি আমি ব্যবহার করে শেষ করেছি। আমি একটি ইনলাইন সমাধান চেয়েছিলাম এবং এটি এখন পর্যন্ত দুর্দান্ত কাজ করছে বলে মনে হচ্ছে:

<textarea onkeyup="$(this).css('height', 'auto').css('height', this.scrollHeight + this.offsetHeight - this.clientHeight);"></textarea>

1

function autoResizeTextarea() {
  for (let index = 0; index < $('textarea').length; index++) {
    let element = $('textarea')[index];
    let offset = element.offsetHeight - element.clientHeight;
    $(element).css('resize', 'none');
    $(element).on('input', function() {
      $(this).height(0).height(this.scrollHeight - offset - parseInt($(this).css('padding-top')));
    });
  }
}

https://codepen.io/nanachi1/pen/rNNKrzQ

এই কাজ করা উচিত.


0

@ জর্জি আইভানকিন একটি মন্তব্যে একটি পরামর্শ দিয়েছেন, আমি এটি সফলভাবে ব্যবহার করেছি :) -, তবে সামান্য পরিবর্তন সহ:

$('#note').on('keyup',function(e){
    var maxHeight = 200; 
    var f = document.getElementById('note'); 
    if (f.clientHeight < f.scrollHeight && f.scrollHeight < maxHeight ) 
        { f.style.height = f.scrollHeight + 'px'; }
    });      

এটি 200px সর্বোচ্চ উচ্চতায় পৌঁছার পরে এটি প্রসারিত হওয়া বন্ধ করে দেয়


0

পুরানো প্রশ্ন তবে আপনি এরকম কিছু করতে পারেন:

এইচটিএমএল:

<textarea class="text-area" rows="1"></textarea>

jQuery:

var baseH; // base scroll height

$('body')
    .one('focus.textarea', '.text-area', function(e) {
        baseH = this.scrollHeight;
    })
    .on('input.textarea', '.text-area', function(e) {
        if(baseH < this.scrollHeight) {
            $(this).height(0).height(this.scrollHeight);
        }
        else {
            $(this).height(0).height(baseH);
        }
    });

এভাবে "পাঠ্য-অঞ্চল" শ্রেণীর সাথে যে কোনও পাঠ্যকে স্বয়ংক্রিয় আকার পরিবর্তন করা হবে। পাঠ্য সরানো হলে সঙ্কুচিতও হয়।

jsfiddle:

https://jsfiddle.net/rotaercz/46rhcqyn/


0

এটা চেষ্টা কর:

  $('textarea[name="mytextarea"]').on('input', function(){
    $(this).height('auto').height($(this).prop('scrollHeight') + 'px');
  }).trigger('input');

0

সাধারণ jQuery সমাধান:

$("textarea").keyup(function() {
    var scrollHeight = $(this).prop('scrollHeight') - parseInt($(this).css("paddingTop")) - parseInt($(this).css("paddingBottom"));

    if (scrollHeight > $(this).height()) {
        $(this).height(scrollHeight + "px");
    }
});

এইচটিএমএল:

<textarea rows="2" style="padding: 20px; overflow: hidden; resize: none;"></textarea>

ওভারফ্লো লুকানো উচিত। আপনি যদি মাউসের সাহায্যে এটিকে পুনরায় আকার পরিবর্তন করতে না চান তবে আকার পরিবর্তন কিছুই নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.