- जटिल JavaScript date picker की जगह सरल और अधिक सुलभ input तरीकों का सुझाव देने वाली गाइड
- ब्राउज़र के built-in input elements (
date, time, datetime-local) का उपयोग करने पर accessibility, performance और internationalization support अपने-आप मिल सकता है
- अलग-अलग input fields, masked input, radio button groups आदि से जटिल UI को सरल बनाया जा सकता है
- React जैसे frameworks में भी built-in HTML input elements को वैसे ही इस्तेमाल किया जा सकता है, और styling सीमित होने के बावजूद users को परिचित system UI मिलता है
- हर date picker में accessibility समस्याएँ होती हैं, इसलिए सरल input structure और वास्तविक user testing सफल form design की कुंजी हैं
क्या JavaScript date picker सच में ज़रूरी है
- ज़्यादातर मामलों में अलग से JavaScript date picker की आवश्यकता नहीं होती
- जटिल UI errors और form abandonment बढ़ा सकता है
- calendar widget से आसान date input के और भी तरीके मौजूद हैं
- इस गाइड का उद्देश्य user-friendly interface के लिए विकल्प प्रस्तुत करना है
ब्राउज़र के built-in date और time input
- सभी आधुनिक ब्राउज़र built-in
date, time, datetime-local input types को support करते हैं
date तारीख चुनने के लिए, time घंटे और मिनट दर्ज करने के लिए, और datetime-local दोनों को मिलाता है
- built-in input को एक लाइन के code से लागू किया जा सकता है, और ब्राउज़र accessibility, performance, internationalization को संभाल लेता है
- keyboard input support, built-in calendar UI उपलब्ध
- यह पूरी तरह परफ़ेक्ट नहीं है, लेकिन ज़्यादातर JavaScript libraries से अधिक स्थिर है
- फिर भी कुछ accessibility issues बने रहते हैं
अलग input और select elements
- एक date picker की तुलना में साल, महीना और दिन को अलग inputs में बाँटना usability बेहतर कर सकता है
- GOV.UK के date input component का उदाहरण दिया गया है
- जब valid data सीमित हो, तब
select element का उपयोग उपयुक्त है
- input errors कम होते हैं, interaction घटता है
- महीनों को संख्याओं में दिखाने पर screen reader द्वारा गलत पढ़े जाने से सावधान रहें
- travel booking जैसे fixed time intervals (जैसे हर 15 मिनट) में relative dates (आज, कल) उपयोगी हो सकती हैं
masked input और validation
- masked input field calendar के बिना date format को guide करने का एक विकल्प है
- JavaScript से client-side validation और formatting की जा सकती है
- उदाहरण: “फ़रवरी के लिए मान्य दिन दर्ज करें (1~28)” जैसा error message
Intl API से date format को अपने-आप format किया जा सकता है
- लेकिन JavaScript से input value update करने पर undo/redo functionality टूट सकती है
- CSS से कई inputs को दृश्य रूप से एक जैसा जोड़कर दिखाया जा सकता है
range selection और सीमित विकल्प
- दो calendars वाले range-select date picker को चलाना मुश्किल होता है और pointer के बिना इस्तेमाल करना असुविधाजनक है
- इसके बजाय दो input fields से इसे सरल बनाया जा सकता है
- जब सिर्फ चुनी जा सकने वाली तारीखें ही चाहिए हों, तब
radio input group से इसे बदला जा सकता है
- जटिल UI के बजाय इसे सरल step-by-step task बनाया जा सकता है
- multi-step form को JavaScript से single-page interaction में बदला जा सकता है
free-form input और suggestion feature
- जब सटीक date या time की ज़रूरत न हो, तब सामान्य text input उपयोगी हो सकता है
datalist element का उपयोग कर input suggestions दी जा सकती हैं
- यह
date, time input types के साथ भी काम करता है
अक्सर पूछे जाने वाले सवाल
JavaScript framework इस्तेमाल करने पर
- सभी प्रमुख frameworks में built-in HTML elements का उपयोग किया जा सकता है
- custom component बनाने की ज़रूरत नहीं
value attribute से two-way state binding संभव है
built-in date picker की styling
input element के केवल कुछ हिस्सों की styling की जा सकती है, बाकी की नहीं
- यह users के लिए परिचित system UI बनाए रखने का एक फ़ायदा है
- operating system, input method और browser के अनुसार design अलग होता है
- अतिरिक्त design uniformity ज़रूरी नहीं
JavaScript date picker की माँग करने वाले stakeholders को कैसे जवाब दें
- लक्ष्य सफल form submission है, और जटिल UI errors बढ़ाता है
- हर date picker में accessibility issues होते हैं
- built-in inputs का संयोजन अधिक user-friendly है
- बिना verify किए गए JavaScript UI पर European Accessibility Act (EAA) जैसे नियमों का जोखिम हो सकता है
- सादगी ही सफलता की कुंजी है
accessibility testing और assurance
- WCAG जैसी accessibility guidelines की समझ अनिवार्य है
- web standards का उपयोग कर custom UI errors से बचा जा सकता है
- browser developer tools की accessibility features से errors पहचाने जा सकते हैं
- कोई tool परफ़ेक्ट नहीं है, और वास्तविक user testing ही एकमात्र भरोसेमंद सत्यापन तरीका है
- accessibility overlay का उपयोग सख़्ती से हतोत्साहित किया जाता है, क्योंकि यह उलटे समस्याएँ बढ़ा सकता है
accessibility से जुड़ी संदर्भ सामग्री
- Collecting dates in an accessible way — Graham Armfield
- What makes an accessible date picker? — Russ Weakley
- Maybe You Don’t Need a Date Picker — Adrian Roselli
- Date Picker Dialog Example — ARIA Authoring Practices Guide
- Designing The Perfect Date And Time Picker — Vitaly Friedman
JavaScript date picker recommendation के सवाल का जवाब
- कोई सार्वभौमिक समाधान नहीं है, हर date picker की अपनी सीमाएँ हैं
- इस गाइड का उद्देश्य आपको अपनी requirements का स्वयं मूल्यांकन करने में मदद करना है
- जहाँ तक संभव हो, सबसे सरल तरीके से लक्ष्य हासिल करने की सलाह दी जाती है
- date picker हमेशा अनिवार्य नहीं होता
निष्कर्ष
- वास्तविक user testing और feedback इकट्ठा करना अनिवार्य है
- यह गाइड अभी प्रगति में है, और feedback का स्वागत है
1 टिप्पणियां
Hacker News राय
“जन्म वर्ष सेट ही नहीं कर सकता”, “अपनी जन्मतिथि तक पहुँचने के लिए पिछले महीने वाले तीर को 720 बार दबाना पड़ा” जैसी बातें सचमुच सुनने को मिली थीं
उस समय iOS और Android दोनों में year बस एक साधारण title जैसा दिखता था, इसलिए उसे clickable element के रूप में पहचाना नहीं जाता था
लगा कि सौंदर्य-केंद्रित Flat Design UX को खराब कर रहा है। Don Norman जैसे UX विशेषज्ञों की बजाय designers के हाथ में OS UI तय होने की हकीकत ही समस्या है
आखिरकार जब इसे textbox-dropdown-textbox (दिन-महीना-वर्ष) रूप में बदला, तो शिकायतें गायब हो गईं
तीन textboxes (दिन, महीना, वर्ष) सबसे अच्छा अनुभव देते हैं।
implementation के लिए pattern guide भी है
लेकिन आधी रात के आसपास flight book करते समय यह भ्रम होता है कि “आज” मेरे timezone के हिसाब से है, server के हिसाब से, या GMT के हिसाब से
timezone, daylight saving time, महीने का अंत (31 जनवरी → अगला महीना?), आधी रात के तुरंत बाद जैसी exceptions बहुत ज़्यादा हैं।
ऐसी सुविधा जोड़ने से पहले सचमुच बहुत सावधान रहना चाहिए
रात 12 बजे के बाद काम करते समय “कल” जैसा expression वास्तविक अनुभव से मेल नहीं खाता।
असल में उसका मतलब “आज सुबह के बाद” होता है, लेकिन system उसे अगले दिन के रूप में पहचानता है
input type="text"के साथ format hint देना हैइससे browser, accessibility, locale जैसी समस्याओं में नहीं उलझना पड़ता
custom component सच में नरक का दरवाज़ा है। थोड़ा स्टाइल मारने के चक्कर में 10 rabbit holes में गिर जाते हैं
क्योंकि तारीख़ को visual रूप से explore करना पड़ता है
तारीख़ से जुड़ी समस्याएँ सच में जटिल हैं, इसलिए use case के हिसाब से approach चाहिए
अगर नेपाल के अस्पताल का system बनाया जाए, तो Nepali calendar और Gregorian calendar दोनों का समर्थन होना चाहिए। Nepali calendar बहुत जटिल है
इथियोपिया 13 महीनों वाला calendar इस्तेमाल करता है, जिसमें आख़िरी महीना 5~6 दिनों का होता है
अगर किसी के पास सही internationalized date picker का कोई अच्छा reference हो, तो जानना चाहूँगा
उदाहरण के लिए dinner reservation में weekend availability देखने के लिए calendar उपयोगी है, लेकिन जन्मतिथि input के लिए संख्यात्मक रूप से जल्दी भरना ज़्यादा कुशल है
“महीने का नाम चुनो → dropdown → year चुनो” जैसी प्रक्रिया rhythm तोड़ देती है
सिर्फ़ numbers भरने का तरीका कहीं ज़्यादा स्वाभाविक है। मोबाइल पर keyboard का बार-बार खुलना-बंद होना इसे और असुविधाजनक बना देता है
डिफ़ॉल्ट UI की जगह custom picker को मजबूर करना अजीब है।
खासकर Android पर iOS-स्टाइल wheel-style time picker को web पर नकल करना सबसे बुरा है
महीना-आधारित, सप्ताह-आधारित, custom range picker भी चाहिए। native form elements बहुत सीमित हैं
<input type="week">या<input type="month">में Firefox support के अलावा और क्या कमी है