তাই আমি ক্লিপিং মাস্ক ব্যবহার সম্পর্কে তেমনী আফিফের উত্তরটি পছন্দ করি। মনে হয় এটা দুর্দান্ত। আমি আরেকটি সমাধান প্রস্তাব করতে চেয়েছিলাম (একটু কম মার্জিত)। আমি এই সমস্যাটি পরীক্ষা করতে ফায়ারফক্স ব্যবহার করেছি এবং পাঠ্য অঞ্চলের বাইরে ক্লিক করা (ফোকাস হারাতে) প্রথম সংখ্যার পুনরায় উপস্থিত হয় না বা স্ট্রিংটি পাঠ্য ইনপুটটিতে স্বাভাবিক অবস্থায় ফিরে আসে না।
আমি বিশ্বাস করি যে সমস্যাটি হ'ল চিঠি স্পেসিং CSS বৈশিষ্ট্যটি আপনি সেট করেছেন: letter-spacing: 31px;এবং আমি বিশ্বাস করি যে এটি বেশিরভাগ ব্রাউজারগুলির "ঝলকানি" ক্যারেটের জন্য প্রযোজ্য। ক্রোম ব্যবহার করে মনে হচ্ছে এটি ফোকাস হারিয়ে ফেললে এটি মুছে ফেলা হবে, অন্যদিকে ফায়ারফক্স ফোকাস হারানোর পরেও এটি ধরে রেখেছে।
প্রথম সমাধানটি হ'ল ইনপুটটিকে ফোকাসটি হারাতে ম্যানুয়ালি ব্লার () ফাংশনটি ব্যবহার করা উচিত। এটি ক্রোমে কাজ করে (একটি স্ব-কার্যকরকারী অনামিকার কাজ ব্যবহার করে):
<input type="text" id="number_text" maxlength="6" onkeyup="(function()
{
var x = document.getElementById('number_text');
let value = x.value
if (value.length >= 6){
x.blur()
return false
}
})();"
pattern="\d{6}" value="1234" >
বা এমনকি সংখ্যার_পেক্স ইনপুট দ্বারা ডাকা একটি সংজ্ঞায়িত ফাংশন হিসাবে:
<script>
handleMaxInput = function(){
var x = document.getElementById('number_text');
let value = x.value
if (value.length >= 6){
x.blur()
return false
}
};
</script>
<input ... id='number_text' ... onkeyup="handleMaxInput()" ... >
আপনি ক্রোমে কিছুটা বিলম্ব লক্ষ্য করবেন, কিন্তু ফায়ারফক্সে এ কল করা সমস্যার সমাধান করবে না।
আমরা ফায়ারফক্সে মূলত এই একই আচরণকে বাধ্য করতে পারি। কিছুটা খেলার পরে, আমি অনুভব করেছি যে ক্রোম একটি অস্পষ্ট বর্ণের ফাঁকে ফাঁকে ফাঁকে ফাঁকে রিফ্রেশ করছে / পুনরায় গণনা করছে। আমার খেলার সেশনটি দেখিয়েছে যে আপনি ফায়ারফক্সকে এই মানটিকে প্রোগ্রাম্যালি পুনরায় গণনা করতে বাধ্য করতে পারেন:
- ইনপুট-এর লেটার-স্পেসিং বৈশিষ্ট্যের ইনলাইন স্টাইলটি একটি ভিন্ন মানের পরিবর্তিত করুন (যেহেতু আমরা অনেক চেষ্টা ছাড়াই প্রোগ্রাম_সংখ্যায় একটি_এসএস ক্লাস সম্পাদনা করতে পারি না, যেমন কোনও নথির শৈলীর অংশে পুরো স্টাইল ট্যাগটি পুনরায় লেখার মতো)।
- ইনপুট থেকে শ্রেণি নম্বর_পদ্ধতিটি সরান।
- 1 এবং 2 বিনিময়যোগ্য, আপনার ফায়ারফক্সের কেবলমাত্র সেট করা ইনলাইন স্টাইলে ফ্যালব্যাকের দরকার, ক্লাসের বৈশিষ্ট্যগুলি 'মেমোরিতে' সংরক্ষণ না করে।
- ইনলাইন-স্টাইলটি সরান এবং নম্বর_টেক্সট সিএসএস ক্লাসটি পুনরায় প্রয়োগ করুন। এটি আমাদের যেমন প্রয়োজন তেমন অক্ষর-বিভাজন পুনরায় গণনা করতে ব্রাউজারকে বাধ্য করবে।
কোডে এটি নীচের জাভাস্ক্রিপ্ট ফাংশনটির মতো দেখাবে:
handleMaxInput = function(){
var x = document.getElementById('number_text');
let value = x.value
if (value.length >= 6){ // if the input is 6 or more characters
x.classList.remove('number_text') // remove the class
x.style.letterSpacing = '0px' // reset the spacing
setTimeout(function() { // set time to let browser refresh updates
x.classList.add('number_text') // Re-add class after browser refresh
setTimeout(function() { // Remove inline-style after more reculculations
x.style.removeProperty('letter-spacing') // Remove inline style to let class styles apply
x.blur // optional, will force input field to lose focus. Else comment out to avoid that.
}, (1)); // waits 1 millisecond
}, (1)); // waits 1 millisecond
}
}
ফায়ারফক্সে ক্রমের মতো একই ফ্লিকার থাকবে এবং সব ঠিকঠাক হবে well
দ্রষ্টব্য : সময়সীমা ফাংশনগুলি হ'ল ব্রাউজারকে রিফ্রেশ করার সময় দেওয়া এবং আমাদের যা প্রয়োজন তা আপডেট করে।
দ্রষ্টব্য : আপনি পাঠ্যবক্সটি ফোকাস হারাতে ফাংশনে .blur () কল করতে পছন্দ করতে পারেন, বা বাদ দিতে পারেন এবং অঙ্কগুলির সাথে ত্রুটি ছাড়াই তারা ইনপুট ক্ষেত্রে থাকবে।
আশা করি এটি আপনার ধারণাগত বোঝার পাশাপাশি সমস্যা সমাধানে সহায়তা করবে। কিছু অন্যান্য ব্যক্তি ভাল সমাধান দিয়েছেন যা পুরো ঝাঁকুনি এড়ায় এবং ফায়ারফক্স এবং ক্রোম উভয় ক্ষেত্রেই কাজ করে!