অন ​​কীপ্রেসের সময় কীভাবে ইনপুট পাঠ্য বাক্সের পাঠ্য পাবেন?


87

আমি পাঠ্য বাক্সে ব্যবহারকারীর টাইপ হিসাবে এটি পাওয়ার চেষ্টা করছি ( jsfiddle খেলার মাঠ ):

function edValueKeyPress() {
    var edValue = document.getElementById("edValue");
    var s = edValue.value;

    var lblValue = document.getElementById("lblValue");
    lblValue.innerText = "The text box contains: " + s;

    //var s = $("#edValue").val();
    //$("#lblValue").text(s);    
}
<input id="edValue" type="text" onKeyPress="edValueKeyPress()"><br>
<span id="lblValue">The text box contains: </span>

কোড, ত্রুটি ছাড়া সঞ্চালিত হয় যে ব্যতীত মান এর input textবক্স সময় onKeyPressসবসময় মান সামনে পরিবর্তন:

এখানে চিত্র বর্ণনা লিখুন

প্রশ্ন : আমি কীভাবে একটি পাঠ্য বাক্সের পাঠ্য পেতে পারি onKeyPress?

বোনাস বকবক

এইচটিএমএল ডিওমে "ব্যবহারকারী টাইপ করছেন" সম্পর্কিত তিনটি ইভেন্ট রয়েছে :

  • onKeyDown
  • onKeyPress
  • onKeyUp

ইন উইন্ডোজ , ক্রম WM_Keyবার্তা গুরুত্বপূর্ণ হয়ে ওঠে তখন ব্যবহারকারী একটি কী নিচে ঝুলিতে, এবং কী পুনরাবৃত্তি শুরু:

  • WM_KEYDOWN('a')- ব্যবহারকারী Aকীটি চেপে রেখেছেন
  • WM_CHAR('a')- aব্যবহারকারীর কাছ থেকে একটি চরিত্র প্রাপ্ত হয়েছে
  • WM_CHAR('a')- aব্যবহারকারীর কাছ থেকে একটি চরিত্র প্রাপ্ত হয়েছে
  • WM_CHAR('a')- aব্যবহারকারীর কাছ থেকে একটি চরিত্র প্রাপ্ত হয়েছে
  • WM_CHAR('a')- aব্যবহারকারীর কাছ থেকে একটি চরিত্র প্রাপ্ত হয়েছে
  • WM_CHAR('a')- aব্যবহারকারীর কাছ থেকে একটি চরিত্র প্রাপ্ত হয়েছে
  • WM_KEYUP('a')- ব্যবহারকারী Aকীটি প্রকাশ করেছে

একটি পাঠ্য নিয়ন্ত্রণে পাঁচটি অক্ষর প্রদর্শিত হবে: aaaaa

গুরুত্বপূর্ণ WM_CHARবার্তাটি হ'ল আপনি বার্তায় সাড়া দিয়েছেন , যা পুনরাবৃত্তি করে। অন্যথায় কোনও কী চাপলে আপনি ইভেন্টগুলি মিস করেন।

ইন এইচটিএমএল জিনিষ কিছুটা ভিন্ন আছেন:

  • onKeyDown
  • onKeyPress
  • onKeyDown
  • onKeyPress
  • onKeyDown
  • onKeyPress
  • onKeyDown
  • onKeyPress
  • onKeyDown
  • onKeyPress
  • onKeyUp

এইচটিএমএল একটি KeyDownএবং KeyPressপ্রতিটি কী পুনরাবৃত্তি সরবরাহ করে। এবং KeyUpইভেন্টটি তখনই উত্থাপিত হয় যখন ব্যবহারকারী কীটি প্রকাশ করে।

অ্যাভয়েস নিন

  • আমি প্রতিক্রিয়া জানাতে পারিonKeyDown বা করতে পারি onKeyPress, তবে উভয়ই input.valueআপডেট হয়ে যাওয়ার আগেই উত্থাপিত হয়
  • আমি প্রতিক্রিয়া জানাতে পারি না onKeyUp, কারণ পাঠ্য-বাক্সের পাঠ্য পরিবর্তনের ফলে এটি ঘটে না।

প্রশ্ন: আমি কীভাবে একটি পাঠ্য-বাক্সের পাঠ্য পেতে পারি onKeyPress?

বোনাস রিডিং


4
আমি বিশ্বাস করি আপনার বর্তমান কীপ্রেসটি আপনাকে ফেরত দেওয়ার আগে মানটিতে যুক্ত করতে হবে; মানটি কী-আপ-এ আপডেট হয় তবে কীডাউনে ডেটা আপনার কাছে উপলভ্য।
ম্যাথলেটিক্স

কী আপ আমার পক্ষে কাজ করে, আপনি ব্লাট যুক্ত করতে না চাইলে এমন কোনও জিনিসের জন্য আপনার জেিকিউ দরকার না
রায়ান বি

আপনার টাস্কের জন্য এটি কেবলমাত্র কেইইউপই যথেষ্ট
dmytro

@ মিমি কেবল হ্যান্ডলিংয়ের onKeyUpসাথে পাঠ্য বাক্সের পরিবর্তনগুলি দেখা যাচ্ছে না।
ইয়ান বয়ড

আপনি যদি কোনও কী চেপে ধরে রাখতে চান এবং টেক্সটবক্সে ফলাফল পেতে চান, তবে আপনার onKeyPress এবং onKeyDown ইভেন্ট উভয়ই জোনাথন এম এর ফিডাল ব্যবহার করা উচিত , তবে আপনি কীগুলি ধরে না রেখেই ফলাফল পেতে চান তবে এটি কেবলই আমার ফিডলকেইপ্যাপ করুন ।
dmytro

উত্তর:


20

inputইভেন্টটি হ্যান্ডলিং একটি সামঞ্জস্যপূর্ণ সমাধান: এটি সমস্ত সমসাময়িক ব্রাউজারগুলির জন্য সমর্থিত হয় textareaএবং আপনার যখন প্রয়োজন হয় ঠিক ঠিক তখন inputএটি জ্বলতে থাকে:

function edValueKeyPress() {
    var edValue = document.getElementById("edValue");
    var s = edValue.value;

    var lblValue = document.getElementById("lblValue");
    lblValue.innerText = "The text box contains: " + s;
}
<input id="edValue" type="text" onInput="edValueKeyPress()"><br>
<span id="lblValue">The text box contains: </span>

যদিও আমি এটি আবার লিখতে চাই:

function showCurrentValue(event)
{
    const value = event.target.value;
    document.getElementById("lblValue").innerText = value;
}
<input id="edValue" type="text" onInput="showCurrentValue(event)"><br>
The text box contains: <span id="lblValue"></span>


54

সহজবোধ্য রাখো. উভয় onKeyPress()এবং onKeyUp():

<input id="edValue" type="text" onKeyPress="edValueKeyPress()" onKeyUp="edValueKeyPress()">

এটি সর্বাধিক আপডেট হওয়া স্ট্রিং মান (কী আপ করার পরে) পাওয়ার এবং যদি ব্যবহারকারী কোনও কী ধরে রাখে তবে আপডেট হয় care

জেএসফিডাল: http://jsfiddle.net/VDd6C/8/


যেহেতু Arnaud576875 এর উত্তরটি onKeyUp(ব্যবহারের উদ্দেশ্যকে পরাস্ত করতে হবে onKeypress) ছেড়ে দিতে হয়েছিল এবং ফলস্বরূপ , এটি সবচেয়ে সহজ, পরিষ্কার এবং সবচেয়ে কাছের উত্তর যে কারও দেখতে পাবে। কেবলমাত্র অতি সতর্কতার সাথে পর্যবেক্ষক ব্যবহারকারীরাই খেয়াল করবেন যে প্রতিক্রিয়াগুলি তারা প্রবেশ করেছে তার সাথে মেলে না।
ইয়ান বয়ড

@ ইয়ান, সাহায্য করে খুশি। "প্রতিক্রিয়াগুলি যা তারা প্রবেশ করেছে তার সাথে মেলে না" বলতে কী বোঝায়? একটি সমন্বয় প্রয়োজন?
জোনাথন এম

মনে আছে এখন আমি কী বোঝাতে চাইছি! আমি যে প্রতিক্রিয়াটির কথা বলছি <input>তা হ'ল উপাদানটি লাল বা সবুজ রঙিন করা বা ব্যবহারকারীকে কিছু অন্য প্রতিক্রিয়া দেওয়া হবে যা তারা টাইপ করেছেন তা ভাল বা খারাপ। আপনার গৃহীত উত্তরটি এখনও সর্বদা "বাই-ওয়ান" চরিত্রের সমস্যাটিতে ভুগছে : কেবলমাত্র সবচেয়ে পর্যবেক্ষক ব্যবহারকারীরাই খেয়াল করবেন যে প্রতিক্রিয়াগুলি তারা প্রবেশ করেছে তার সাথে মেলে না। " বাস্তবে, অফ-বাই- এক-ত্রুটি কেবল কী-রিপিট করার সময় ঘটে (যেমন তারা কীটি ধরে রাখে) কেউই (আমার বাদে) সমস্যাটি দেখতে পাবে না
ইয়ান বয়ড

19

অনকিপ্রেস চলাকালীন ইনপুট পাঠ্য বাক্সের মান হ'ল পরিবর্তনের আগে সর্বদা মান

এটি উদ্দেশ্যমূলক: এটি ইভেন্ট শ্রোতাদের কী-টিপস বাতিল করতে দেয়।

ইভেন্ট শ্রোতারা ইভেন্টটি বাতিল করে দিলে মানটি আপডেট হয় না। ইভেন্টটি বাতিল না হলে মানটি আপডেট করা হয় তবে ইভেন্ট শ্রোতাদের ডাকা হওয়ার পরে

ক্ষেত্রের মান আপডেট হওয়ার পরে মানটি পেতে, পরবর্তী ইভেন্ট লুপে চালানোর জন্য একটি ফাংশন নির্ধারণ করুন। এটি করার স্বাভাবিক setTimeoutউপায়টি একটি সময়সীমা সহ কল করা 0:

$('#field').keyup(function() {
    var $field = $(this);

    // this is the value before the keypress
    var beforeVal = $field.val();

    setTimeout(function() {

        // this is the value after the keypress
        var afterVal = $field.val();
    }, 0);
});

এখানে চেষ্টা করুন: http://jsfiddle.net/Q57gY/2/

সম্পাদনা করুন : কিছু ব্রাউজার (যেমন ক্রোম) ব্যাকস্পেসের জন্য কীপ্রেস ইভেন্টগুলি ট্রিগার করে না; কোডটিতে কীপ্রেস কী-আপে পরিবর্তিত হয়েছে।


এটি পোস্ট করার কথা ছিল। এখানে আমি জেএসফিডালটি করেছি।
কাপা

আপনি ঠিক বলেছেন, Chrome ব্যাকস্পেসের জন্য কীপ্রেস ইভেন্টগুলি ট্রিগার করবে না বলে মনে হচ্ছে; আপডেট
আর্নাড লে ব্ল্যাঙ্ক

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

পরিষ্কার হতে: ব্যাকস্পেসের জন্য কী-চাপড়ান ইভেন্টগুলি ট্রিগার না করা স্ট্যান্ডার্ড অনুসারে: "কীটি একটি চরিত্রের মান উত্পন্ন করে" - অন্যান্য কীগুলির জন্য "কীডাউন" (পরিবর্তন করার আগে, বাতিলকরণযোগ্য) বা "কীপ" (পরিবর্তনের পরে)
সেবিলাস

5

এটি কমপ্যাক্ট রাখুন।
প্রতিবার আপনি কী টিপলে ফাংশনটি edValueKeyPress()ডাকা হয়।
আপনি সেই ফাংশনটিতে কিছু ভেরিয়েবল ঘোষণা ও প্রারম্ভিকও করেছেন - যা প্রক্রিয়াটি ধীর করে দেয় এবং আরও সিপিইউ এবং মেমরিরও প্রয়োজন।
আপনি সহজভাবে এই কোডটি ব্যবহার করতে পারেন - সাধারণ প্রতিস্থাপন থেকে প্রাপ্ত।

function edValueKeyPress()
{
    document.getElementById("lblValue").innerText =""+document.getElementById("edValue").value;
}

এটিই আপনি চান, এবং এটি দ্রুত!


3
<asp:TextBox ID="txtMobile" runat="server" CssClass="form-control" style="width:92%;  margin:0px 5px 0px 5px;" onkeypress="javascript:return isNumberKey(event);" MaxLength="12"></asp:TextBox>

<script>
    function isNumberKey(evt) {
        var charCode = (evt.which) ? evt.which : event.keyCode;
        if (charCode > 31 && (charCode < 48 || charCode > 57)) {
            return false;
        }
        return true;
    }
</script>

3

এখনও অবধি কোনও উত্তরই সম্পূর্ণ সমাধান দেয় না। এখানে কয়েকটি সমস্যা সমাধান করতে হবে:

  1. নেই সব keypresses সম্মুখের গৃহীত হয় keydownএবং keypressহ্যান্ডেলার (যেমন ব্যাকস্পেস এবং ডিলিট কী কিছু ব্রাউজার দ্বারা আর দেখানো হয় না)।
  2. হ্যান্ডলিং keydownকরা ভাল ধারণা নয়। এমন পরিস্থিতি রয়েছে যেখানে কী-ডাউনের ফলে কিপ্রেস হয় না!
  3. setTimeout() গুগল ক্রোম / ব্লিঙ্ক ওয়েব ব্রাউজারের অধীনে স্টাইল সমাধানগুলি বিলম্বিত হবে যতক্ষণ না ব্যবহারকারী টাইপ করা বন্ধ করে দেয়।
  4. মাউস এবং স্পর্শ ইভেন্টগুলি কাটা, অনুলিপি এবং পেস্টের মতো ক্রিয়া করতে ব্যবহৃত হতে পারে। এই ইভেন্টগুলি কীবোর্ড ইভেন্টগুলিকে ট্রিগার করবে না।
  5. ইনপুট পদ্ধতির উপর নির্ভর করে ব্রাউজারটি বিজ্ঞপ্তিটি সরবরাহ করতে পারে না যে ব্যবহারকারী ক্ষেত্র থেকে দূরে নেভিগেট না হওয়া পর্যন্ত উপাদানটি পরিবর্তিত হয়েছে।

আরো সঠিক সমাধান হ্যান্ডেল করা হবে keypress, keyup, input, এবং changeইভেন্ট নেই।

উদাহরণ:

<p><input id="editvalue" type="text"></p>
<p>The text box contains: <span id="labelvalue"></span></p>

<script>
function UpdateDisplay()
{
    var inputelem = document.getElementById("editvalue");
    var s = inputelem.value;

    var labelelem = document.getElementById("labelvalue");
    labelelem.innerText = s;
}

// Initial update.
UpdateDisplay();

// Register event handlers.
var inputelem = document.getElementById("editvalue");
inputelem.addEventListener('keypress', UpdateDisplay);
inputelem.addEventListener('keyup', UpdateDisplay);
inputelem.addEventListener('input', UpdateDisplay);
inputelem.addEventListener('change', UpdateDisplay);
</script>

ফিডল:

http://jsfiddle.net/VDd6C/2175/

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


কেন শুধু inputঅনুষ্ঠান নয়?
ইয়াকোভল

inputসর্বদা আগুন না। কোনও একক ইভেন্ট সমস্ত পরিস্থিতি coversেকে রাখে না।
কিউবিকসফট

যদি আপনি keypressউত্তরে "সর্বদা না" বর্ণনা করেন তবে আপনার
মতামতটি

1

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

সাম্প্রতিক জেএস উদাহরণ

document.querySelector('#test').addEventListener('keypress', function(evt) {
    var real_val = this.value + String.fromCharCode(evt.which);
    if (evt.which == 8) real_val = real_val.substr(0, real_val.length - 2);
    alert(real_val);
}, false);

পুরানো আইই উদাহরণগুলির জন্য সমর্থন

//get field
var field = document.getElementById('test');

//bind, somehow
if (window.addEventListener)
    field.addEventListener('keypress', keypress_cb, false);
else
    field.attachEvent('onkeypress', keypress_cb);

//callback
function keypress_cb(evt) {
    evt = evt || window.event;
    var code = evt.which || evt.keyCode,
        real_val = this.value + String.fromCharCode(code);
    if (code == 8) real_val = real_val.substr(0, real_val.length - 2);
}

[সম্পাদনা করুন - এই পদ্ধতিটি, ডিফল্টরূপে, ব্যাক স্পেস, সিটিআরএল + এ এর ​​মতো জিনিসগুলির জন্য টিপুন অক্ষম করে। উপরের কোডটি পূর্বেরদের জন্য উপযুক্ত, তবে পরবর্তীগুলির জন্য অনুমতি দেওয়ার জন্য আরও টিঙ্কিংয়ের প্রয়োজন হবে এবং কয়েকটি অন্যান্য ঘটনা ঘটবে। ইয়ান বয়ডের মন্তব্য নীচে দেখুন]]


4
@ bažmegakapa বা deleteকী সহ, অথবা যদি ব্যবহারকারী কোনও কী চাপায় যা বিষয়বস্তুগুলি ( Ctrl+A) সংশোধন করে না , বা যদি ব্যবহারকারী কোনও পাঠ্য নির্বাচন করে এবং তারপরে aএকটি উপসেটটি প্রতিস্থাপনের জন্য চাপ দেয়। এটি একটি দুর্দান্ত ধারণা, উতকানোস, তবে একটি ভঙ্গুর।
ইয়ান বয়ড

4
রাজি। এতে কিছু মাইলেজ আছে বলেই আমি এটি ছেড়ে দেব তবে আপনি যেমন বলেছিলেন, আপনাকে এই ক্যাভেটগুলির জন্য ভাতা তৈরি করতে হবে।
মিত্যা

1

সহজ ...

আপনার কী প্রেসের ইভেন্ট হ্যান্ডলারটিতে লিখুন

void ValidateKeyPressHandler(object sender, KeyPressEventArgs e)
{
    var tb = sender as TextBox;
    var startPos = tb.SelectionStart;
    var selLen= tb.SelectionLength;

    var afterEditValue = tb.Text.Remove(startPos, selLen)
                .Insert(startPos, e.KeyChar.ToString()); 
    //  ... more here
}

যদি কি হবে e.KeyCharহয় Backspaceকী? নাকি Deleteচাবি? নাকি Ctrl+A?
ইয়ান বয়ড

এটি কি জাভাস্ক্রিপ্ট? void? object? প্রথম-আপার ক্ষেত্রে পদ্ধতি?
ইয়াকভএল

1

সুতরাং প্রতিটি ইভেন্টের সুবিধা এবং অসুবিধা রয়েছে। ইভেন্টগুলি onkeypressএবং onkeydownসর্বশেষ মানটি পুনরুদ্ধার onkeypressকরে না এবং কিছু ব্রাউজারে মুদ্রণযোগ্য অক্ষরের জন্য আগুন দেয় না। onkeyupঘটনা যখন একটি কী একাধিক অক্ষরের জন্য নিচে অনুষ্ঠিত হয় শনাক্ত করতে পারেনি।

এটি কিছুটা হ্যাকি, তবে এমন কিছু করছে

function edValueKeyDown(input) {
    var s = input.value;

    var lblValue = document.getElementById("lblValue");
    lblValue.innerText = "The text box contains: "+s;

    //var s = $("#edValue").val();
    //$("#lblValue").text(s);    
}
<input id="edValue" type="text" onkeydown="setTimeout(edValueKeyDown, 0, this)" />

সমস্ত বিশ্বের সেরা পরিচালনা করে বলে মনে হচ্ছে।


1

ইভেন্ট.কি ব্যবহার করে আমরা এইচটিএমএল ইনপুট পাঠ্য বাক্সে প্রবেশের পূর্বে মানগুলি পেতে পারি। কোডটি এখানে।

function checkText()
{
  console.log("Value Entered which was prevented was - " + event.key);
  
  //Following will prevent displaying value on textbox
  //You need to use your validation functions here and return value true or false.
  return false;
}
<input type="text" placeholder="Enter Value" onkeypress="return checkText()" />


কীপ্রেস নয় এমন কোনও কিছুর মাধ্যমে পাঠ্য পরিবর্তন করা হলে এটি পৃথক হয়ে যায় (কাটা, পেস্ট করুন, নির্বাচিত মুছুন ইত্যাদি)
ইয়ান বয়ড

@ ইয়ানবয়েড হ্যাঁ রাজি হয়েছেন। উদাহরণটি সহজ রাখতে আমি কেবল কীপ্রেসের বৈধতা প্রয়োগ করেছি।
vis2006

0

আপনার প্রাপ্ত মানটির সাথে ইভেন্টের কোডকোডকে সংযুক্ত করার চেষ্টা করুন। এখানে আমার কোডের একটি নমুনা রয়েছে:

<input type="text" name="price" onkeypress="return (cnum(event,this))" maxlength="10">
<p id="demo"></p>

জেএস:

function cnum(event, str) {
    var a = event.charCode;
    var ab = str.value + String.fromCharCode(a);
    document.getElementById('demo').innerHTML = ab;
}

মানটি abইনপুট ক্ষেত্রে সর্বশেষতম মান পাবে।


দুঃখিত, আমি এই পোস্ট করার পরে এই পৃষ্ঠায় আরও ভাল পদ্ধতির সাথে অন্য একটি পোস্ট লক্ষ্য করেছি। পোস্ট করার আগে আমি তা দেখিনি। তবে আমি মনে করি আমার ধারণাটি বুঝতে সহজ।
রমা কৃষ্ণ

কীটি মুছে ফেলা , ব্যাকস্পেস , Ctrl + X বা Ctrl + V , বা যখন মাউস সমস্ত পাঠ্য নির্বাচন করে এবং আমি স্পেস
ইয়ান বয়ড

আমি শুধু আমার ধারণা লিখেছি। আপনি কীকোড বা অন্যান্য পদ্ধতি ব্যবহার করে আপনার প্রয়োজনীয়তা অনুযায়ী এটি প্রয়োগ করতে পারেন। এটি কেবল আমার ধারণা।
রাম কৃষ্ণ

4
আইডিয়াগুলি উত্তর নয়। এসও-তে উত্তরগুলি সংক্ষিপ্ত সমাধান হওয়া উচিত যা ওপি-র প্রশ্নের সুনির্দিষ্ট উত্তর দেয় যাতে প্রত্যেকে উপকৃত হয়। এটি পরিষ্কারভাবে সেই মানদণ্ডকে মেটায় না।
কিউবিকসফট

0

এটি করার আরও ভাল উপায় আছে। কনক্যাট পদ্ধতিটি ব্যবহার করুন। উদাহরণ

একটি বৈশ্বিক চলক ঘোষণা। এটি কৌণিক 10 এ ভাল কাজ করে, এটি কেবল ভ্যানিলা জাভাস্ক্রিপ্টে দিন। উদাহরণ:

এইচটিএমএল

<input id="edValue" type="text" onKeyPress="edValueKeyPress($event)"><br>
<span id="lblValue">The text box contains: </span>

কোড

emptyString = ''

edValueKeyPress ($event){
   this.emptyString = this.emptyString.concat($event.key);
   console.log(this.emptyString);
}

এবং কী যখন Delete, Ctrl+ + X, Ctrl+ + V, Backspace? অথবা তারা যদি কিছু পাঠ্য নির্বাচন করে থাকে এবং চাপুন A?
ইয়ান বয়ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.