নিজের জন্য এটি সমাধান করার চেষ্টা করার সময়, আমি লক্ষ্য করেছি যে পৃষ্ঠার স্ক্রোলিংটি ধরে রাখা এবং ইনপুটটির ফোকাসটি রাখা সম্ভব ছিল, যেখানে ধরা পড়েছে তার মূল উপাদানটির উপর ধরা পড়া ইভেন্টটিকে পুনরায় গুলি চালানোর চেষ্টা করে সংখ্যা পরিবর্তনগুলি অক্ষম <input type="number"/>
করে , কেবল এই মত:
e.target.parentElement.dispatchEvent(e);
তবে এটি ব্রাউজার কনসোলে ত্রুটি সৃষ্টি করে এবং সম্ভবত সর্বত্র কাজ করার গ্যারান্টিযুক্ত নয় (আমি কেবল ফায়ারফক্সে পরীক্ষা করেছি), কারণ এটি ইচ্ছাকৃতভাবে অবৈধ কোড।
ফায়ারফক্স এবং ক্রোমিয়ামে অন্তত অস্থায়ীভাবে <input>
উপাদানটি তৈরি করা অন্য সমাধান যা এই উপাদানটি তৈরি করে readOnly
:
function handleScroll(e) {
if (e.target.tagName.toLowerCase() === 'input'
&& (e.target.type === 'number')
&& (e.target === document.activeElement)
&& !e.target.readOnly
) {
e.target.readOnly = true;
setTimeout(function(el){ el.readOnly = false; }, 0, e.target);
}
}
document.addEventListener('wheel', function(e){ handleScroll(e); });
এর একটি পার্শ্ব প্রতিক্রিয়া যা আমি লক্ষ্য করেছি তা হ'ল যদি readOnly
ক্ষেত্রগুলির জন্য বিভিন্ন স্টাইলিং থাকে তবে এটি ক্ষেত্রকে বিভক্ত-দ্বিতীয় জন্য ঝাঁকুনির কারণ হতে পারে , তবে আমার ক্ষেত্রে কমপক্ষে এটি কোনও সমস্যা বলে মনে হয় না।
একইভাবে, (জেমস এর উত্তরে ব্যাখ্যা হিসাবে) readOnly
সম্পত্তি পরিবর্তনের পরিবর্তে আপনি blur()
ক্ষেত্রটি করতে পারেন এবং focus()
এটি আবার ফিরে আসতে পারেন, তবে আবার ব্যবহারের শৈলীর উপর নির্ভর করে কিছু ঝাঁকুনির সৃষ্টি হতে পারে।
বিকল্প হিসাবে, এখানে অন্যান্য মন্তব্যে উল্লিখিত হিসাবে, আপনি কেবল preventDefault()
ইভেন্টটির পরিবর্তে কল করতে পারেন । ধরে নিই যে আপনি কেবল wheel
সংখ্যা ইনপুটগুলিতে ইভেন্টগুলি পরিচালনা করছেন যা ফোকাসে রয়েছে এবং মাউস কার্সারের অধীনে রয়েছে (এটি উপরের তিনটি শর্তই বোঝায়) ব্যবহারকারীর অভিজ্ঞতার উপর নেতিবাচক প্রভাব কোনওটিরই কাছাকাছি থাকবে না।