আমি ওয়েব অ্যাপ্লিকেশন তৈরি করছি যা মূলত মোবাইল ব্রাউজারগুলির জন্য। আমি সংখ্যার প্রকার সহ ইনপুট ক্ষেত্রগুলি ব্যবহার করছি, সুতরাং (বেশিরভাগ) মোবাইল ব্রাউজারগুলি আরও ভাল ব্যবহারকারীর অভিজ্ঞতার জন্য কেবল সংখ্যা কীবোর্ডের জন্য প্রার্থনা করে। এই ওয়েব অ্যাপ্লিকেশনটি মূলত সেই অঞ্চলে ব্যবহৃত হয় যেখানে দশমিক বিভাজক কমা, বিন্দু নয়, তাই আমার উভয় দশমিক বিভাজক পরিচালনা করতে হবে।
ডট এবং কমা দিয়ে কীভাবে এই পুরো জগাখিচুড়ি?
আমার অনুসন্ধানগুলি:
ডেস্কটপ ক্রোম
- ইনপুট ধরণ = সংখ্যা
- ব্যবহারকারী ইনপুট ক্ষেত্রে "4,55" প্রবেশ করে
$("#my_input").val();
"455" প্রদান করে- আমি ইনপুট থেকে সঠিক মান পেতে পারি না
ডেস্কটপ ফায়ারফক্স
- ইনপুট ধরণ = সংখ্যা
- ব্যবহারকারী ইনপুট ক্ষেত্রে "4,55" প্রবেশ করে
$("#my_input").val();
"4,55" প্রদান করে- ঠিক আছে, আমি বিন্দু দিয়ে কমা প্রতিস্থাপন করতে এবং সঠিক ভাসা পেতে পারি
অ্যান্ড্রয়েড ব্রাউজার
- ইনপুট ধরণ = সংখ্যা
- ব্যবহারকারী ইনপুট ক্ষেত্রে "4,55" প্রবেশ করে
- যখন ইনপুট ফোকাস হারিয়ে ফেলে, মান "4" এ কেটে ফেলা হয়
- ব্যবহারকারীকে বিভ্রান্ত করছে
উইন্ডোজ ফোন 8
- ইনপুট ধরণ = সংখ্যা
- ব্যবহারকারী ইনপুট ক্ষেত্রে "4,55" প্রবেশ করে
$("#my_input").val();
"4,55" প্রদান করে- ঠিক আছে, আমি বিন্দু দিয়ে কমা প্রতিস্থাপন করতে এবং সঠিক ভাসা পেতে পারি
এই ধরণের পরিস্থিতিতে "সেরা অনুশীলনগুলি" কী কী যখন ব্যবহারকারী দশমিক বিভাজক হিসাবে কমা বা বিন্দু ব্যবহার করতে পারে এবং আরও ভাল ব্যবহারকারীর অভিজ্ঞতা দেওয়ার জন্য আমি এইচটিএমএল ইনপুট প্রকারটিকে নম্বর হিসাবে রাখতে চাই?
আমি কী কমাগুলিকে "ফ্লাই অন" ফ্লাইটে "বিন্দুতে রূপান্তর করতে পারি, কী ইভেন্টগুলিকে আবদ্ধ করে রাখছি, এটি কি সংখ্যা ইনপুট নিয়ে কাজ করছে?
সম্পাদনা
কারেনলিটি আমার কোনও সমাধান নেই, কীভাবে ইনপুট থেকে কোন ধরণের সংখ্যায় সেট করা হয় তা থেকে ভাসমান মান (স্ট্রিং বা সংখ্যা হিসাবে) কীভাবে পাবেন। যদি এন্ডুয়েসার "4,55" প্রবেশ করে, ক্রোম সর্বদা "455" ফেরত দেয়, ফায়ারফক্স "4,55" ফিরিয়ে দেয় যা ভাল।
এছাড়াও এটি বেশ বিরক্তিকর যে অ্যান্ড্রয়েডে (পরীক্ষিত 4.2 এমুলেটর), যখন আমি ইনপুট ফিল্ডে "4,55" প্রবেশ করি এবং অন্য কোথাও ফোকাস পরিবর্তন করি, তখন প্রবেশ নম্বরটি "4" এ কেটে যায়।
var number = $(...).get(0).valueAsNumber;
if (isNaN(number)) number = parseFloat($(...).val().replace(',', '.');
তবে সমাধানটি কেবল তখনই কাজ করে যদি যে নাম্বারে রাখা হয়েছে তাতে কেবল 1 টি কমা এবং অতিরিক্ত বিন্দু নেই ...
.val()
, আবার এটিকে আবার স্ট্রিতে রূপান্তরিত করে , এবং অ্যান্ড্রয়েড অদ্ভুত কিছু করে। আপনি যখন সিস্টেমের ভাষাটিকে উপযুক্ত কিছুতে সেট করেন তখন তারা কি একইরকম আচরণ করে তা পরীক্ষা করতে পারেন?