Περιγραφή εικόνας: Οδική πινακίδα με βέλος που δείχνει προς τα αριστερά, συμβολίζοντας κατεύθυνση ή επιλογή.
Κατανοητά μηνύματα σφάλματος
Κατανοητά μηνύματα σφάλματος: Ο πλήρης οδηγός
Κάθε πεδίο φόρμας που δημιουργείτε, κάθε διαδικασία επικύρωσης που ενεργοποιείτε, κάθε κατάσταση αποτυχίας που εμφανίζετε — αυτές είναι στιγμές κατά τις οποίες τα ψηφιακά προϊόντα είτε συμπεριλαμβάνουν είτε αποκλείουν εκατομμύρια ανθρώπους. Δείτε πώς μπορείτε να τα κάνετε όλα σωστά.
Το κρυφό κόστος των άχρηστων σφαλμάτων
Σίγουρα το έχετε δει: μια φόρμα που σας εμφανίζει το μήνυμα «Μη έγκυρη εισαγωγή» αφού έχετε πληκτρολογήσει προσεκτικά τον αριθμό τηλεφώνου σας. Μια διαδικασία ολοκλήρωσης αγοράς που επισημαίνει ένα πεδίο με κόκκινο χρώμα χωρίς να δίνει καμία εξήγηση. Ένα μήνυμα σφάλματος που χρησιμοποιεί αινιγματικούς κωδικούς που καταλαβαίνει μόνο ο προγραμματιστής που το έγραψε στις 11 το βράδυ μιας Παρασκευής.
Δεν πρόκειται για ασήμαντα προβλήματα εμπειρίας χρήστη. Για τα 1,3 δισεκατομμύρια άτομα παγκοσμίως που ζουν με κάποια μορφή αναπηρίας, τα κακώς σχεδιασμένα μηνύματα σφάλματος μπορούν να καταστήσουν ένα ψηφιακό προϊόν εντελώς άχρηστο. Για τους χρήστες προγραμμάτων ανάγνωσης οθόνης, ένα μήνυμα σφάλματος που αλλάζει μόνο χρώμα είναι αόρατο. Για τους χρήστες με γνωστικές αναπηρίες, μια ασαφής φράση μίας γραμμής όπως «Κάτι πήγε στραβά» είναι παραλυτική. Για κάποιον που βασίζεται στον φωνητικό έλεγχο, ένα σφάλμα φόρμας που κλέβει το εστιακό σημείο απρόβλεπτα διακόπτει ολόκληρη τη ροή εργασίας.
Τα προσβάσιμα μηνύματα σφάλματος δεν συνίστανται απλώς στην προσθήκη χαρακτηριστικών ARIA ως μετά το γεγονός. Απαιτούν προσεκτική διατύπωση, κατάλληλη δομή DOM, οπτικά και μη οπτικά σήματα, καθώς και βαθύ σεβασμό για την ποικιλομορφία των χρηστών σας. Ο παρών οδηγός αναλύει κάθε πτυχή της σωστής υλοποίησής τους — από τα κριτήρια WCAG και τις αρχές σύνταξης κειμένων έως τα πρότυπα κώδικα.
Εστιάζουμε στα σφάλματα επικύρωσης από την πλευρά του χρήστη και από την πλευρά του διακομιστή στις διαδικτυακές διεπαφές, αν και οι περισσότερες αρχές ισχύουν εξίσου για τις εγγενείς εφαρμογές για κινητά, τα τερματικά κιόσκι και τις φωνητικές διεπαφές. Οι αναφορές αφορούν το πρότυπο WCAG 2.2 AA, εκτός αν αναφέρεται διαφορετικά.
Τι απαιτεί στην πραγματικότητα το πρότυπο
Το WCAG 2.2, που δημοσιεύθηκε τον Οκτώβριο του 2023, αποτελεί το τρέχον πρότυπο για την προσβασιμότητα στον Ιστό και το σημείο αναφοράς για τα περισσότερα νομικά πλαίσια — συμπεριλαμβανομένης της Οδηγίας της ΕΕ για την Προσβασιμότητα στον Ιστό, του Νόμου περί Ισότητας του Ηνωμένου Βασιλείου και του ADA των ΗΠΑ. Αρκετά κριτήρια επιτυχίας ισχύουν άμεσα για τα μηνύματα σφάλματος. Είναι απαραίτητο να κατανοήσετε πλήρως το γράμμα του κάθε κριτηρίου προτού μπορέσετε να προχωρήσετε πέρα από αυτά.
| Κριτήριο | Επίπεδο | Τι απαιτείται | Για μηνύματα σφάλματος |
|---|---|---|---|
| 1.3.1 Πληροφορίες και σχέσεις | Α | Να αποδίδετε τη δομή και τις σχέσεις μέσω της σημασιολογίας, όχι μόνο μέσω της εμφάνισης. | Η ένδειξη κατάστασης σφάλματος μόνο μέσω χρώματος δεν είναι αποτελεσματική. Η σχέση μεταξύ ενός πεδίου και του σφάλματός του πρέπει να μπορεί να προσδιοριστεί μέσω προγραμματισμού — χρησιμοποιήστε <label>, aria-invalid="true", και aria-describedby για να αντιστοιχίσετε το κείμενο του σφάλματος με την εισαγωγή. |
| 1.4.1 Χρήση χρωμάτων | Α | Μην χρησιμοποιείτε το χρώμα ως το μοναδικό οπτικό μέσο για τη μετάδοση πληροφοριών. | Τα κόκκινα περιγράμματα από μόνα τους δεν αρκούν. Προσθέστε ένα εικονίδιο, μια ετικέτα κειμένου ή ένα μοτίβο. |
| 1.4.3 Αντίθεση (ελάχιστη) | ΑΑ | Το κείμενο πρέπει να έχει αναλογία αντίθεσης τουλάχιστον 4,5:1 (3:1 για μεγάλο κείμενο). | Το κείμενο σφάλματος σε ανοιχτό κόκκινο (#f87171) πάνω σε λευκό φόντο επιτυγχάνει αναλογία μόνο ~2,93:1 — πολύ κάτω από την απαιτούμενη αναλογία 4,5:1. Χρησιμοποιήστε πιο σκούρες αποχρώσεις: το #b91c1c πάνω σε λευκό φόντο δίνει αναλογία ~7,1:1 και πληροί άνετα τις προδιαγραφές. |
| 2.4.3 Σειρά εστίασης | Α | Η σειρά προτεραιότητας πρέπει να διατηρεί το νόημα και τη λειτουργικότητα. | Η κακή διαχείριση της εστίασης μετά από μια αποτυχημένη υποβολή μπορεί να διαταράξει τη λογική ακολουθία (π.χ. η εστίαση να μετακινηθεί μετά το σφάλμα, καθιστώντας το απρόσιτο). Η μετακίνηση της εστίασης σε μια σύνοψη σφαλμάτων σε περίπτωση αποτυχίας της υποβολής αποτελεί μια συνιστώμενη τεχνική — που εξυπηρετεί κυρίως τις απαιτήσεις SC 3.3.1 και 3.3.2 — η οποία διατηρεί επίσης τη συνοχή της σειράς εστίασης σύμφωνα με την απαίτηση 2.4.3. |
| 3.3.1 Εντοπισμός σφαλμάτων | Α | Εάν εντοπιστεί σφάλμα εισαγωγής, το στοιχείο επισημαίνεται και το σφάλμα περιγράφεται με κείμενο. | Το σφάλμα πρέπει να περιγράφεται με κείμενο — και όχι μόνο να υποδεικνύεται οπτικά. |
| 3.3.2 Ετικέτες ή οδηγίες | Α | Παρέχετε ετικέτες ή οδηγίες όταν το περιεχόμενο απαιτεί εισαγωγή δεδομένων από τον χρήστη. | Οι υποδείξεις μορφοποίησης (π.χ. «ΗΗ/ΜΜ/ΕΕΕΕ») πρέπει να αναγράφονται πριν από την υποβολή, και όχι μόνο όταν εμφανίζεται σφάλμα. |
| 3.3.3 Πρόταση για σφάλμα | ΑΑ | Εάν εντοπιστεί κάποιο σφάλμα και υπάρχουν γνωστές προτάσεις, παρακαλώ να τις υποβάλετε. | Το «Μη έγκυρη ημερομηνία» δεν αρκεί. Το «Εισάγετε μια ημερομηνία με τη μορφή ΗΗ/ΜΜ/ΕΕΕΕ, π.χ. 23/03/2026» είναι σωστό. |
| 3.3.4 Πρόληψη σφαλμάτων | ΑΑ | Για υποβολές νομικού, οικονομικού ή δεδομένων χαρακτήρα, πραγματοποιήστε έλεγχο, επιβεβαίωση ή ακύρωση. | Δώστε τη δυνατότητα στους χρήστες να ελέγξουν και να διορθώσουν το κείμενο πριν από την τελική υποβολή. |
| 4.1.3 Μηνύματα κατάστασης | ΑΑ | Τα μηνύματα κατάστασης μπορούν να προσδιοριστούν μέσω προγραμματισμού με βάση τον ρόλο ή την ιδιότητα, χωρίς να λαμβάνουν το εστιακό σημείο. | Χρήση role="alert", role="status", ή aria-live έτσι ώστε οι χρήστες του AT να λάβουν το μήνυμα. |
Πολλές ομάδες ερμηνεύουν τη φράση «προσδιορίζονται και περιγράφονται στο κείμενο» ως την απλή προσθήκη μιας ετικέτας. Ωστόσο, το πεδίο στο οποίο εμφανίζεται το σφάλμα πρέπει να είναι αναγνωρίσιμο — δηλαδή, το μήνυμα σφάλματος πρέπει είτε να βρίσκεται δίπλα στο πεδίο είτε το όνομα του πεδίου να αναφέρεται στο κείμενο του σφάλματος. Η φράση «Παρακαλώ διορθώστε τα πεδία που έχουν επισημανθεί» δεν πληροί αυτή την προϋπόθεση.
Τι κάνει ένα μήνυμα σφάλματος να είναι καλό
Ένα σωστά δομημένο μήνυμα σφάλματος περιλαμβάνει τέσσερα στοιχεία που είναι απαραίτητα. Κάθε ένα εξυπηρετεί έναν ξεχωριστό σκοπό — αν αφαιρέσετε έστω και ένα από αυτά, υποβαθμίζετε την εμπειρία για ένα μέρος των χρηστών σας.
Το πλαίσιο της γλώσσας: Έξι κανόνες για τη σύνταξη κειμένων με λάθη
Τα μηνύματα σφάλματος αποτελούν μια μορφή κειμένου UX. Δεν είναι καταχωρήσεις καταγραφής. Δεν είναι σημειώσεις προγραμματιστών. Είναι επικοινωνία μεταξύ ανθρώπων σε κατάσταση πίεσης — γραμμένη για κάποιον που μόλις απέτυχε σε κάτι και πρέπει να πετύχει.
1. Να είστε συγκεκριμένοι
Εξηγήστε στον χρήστη ακριβώς ποιο είναι το πρόβλημα. Η ένδειξη «Μη έγκυρο» δεν του λέει τίποτα. Η ένδειξη «Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 8 χαρακτήρες» του λέει τα πάντα.
2. Να είναι εφαρμόσιμο
Το μήνυμα θα πρέπει να υπονοεί ή να αναφέρει ρητά τον τρόπο διόρθωσης του σφάλματος. Συμπεριλάβετε παραδείγματα μορφοποίησης, όταν η σωστή μορφοποίηση δεν είναι προφανής.
3. Αποφύγετε τις κατηγορίες
Μην λέτε ποτέ «εισάγατε», «η εισαγωγή σας» ή «αποτύχατε». Προτιμήστε παθητικές κατασκευές: «Η διεύθυνση email που εισήχθη είναι ελλιπής.»
4. Χρησιμοποιήστε απλή γλώσσα
Γράψτε σε επίπεδο ανάγνωσης περίπου 11 ετών. Αποφύγετε την ορολογία, τους τεχνικούς κωδικούς και τις παθητικο-επιθετικές φράσεις όπως «παρακαλώ δοκιμάστε ξανά».
5. Προγραμματίστε το σωστά
Εμφάνιση σφαλμάτων εντός του πεδίου κατά την απομάκρυνση του δείκτη (όταν ο χρήστης απομακρύνει τον δείκτη από το πεδίο), όχι σε κάθε πάτημα πλήκτρου. Εμφάνιση συνοπτικών σφαλμάτων μόνο μετά από απόπειρα υποβολής.
6. Λάβετε υπόψη το πλαίσιο
Ένα σφάλμα στη φόρμα πληρωμής απαιτεί περισσότερη καθησύχαση από ένα φίλτρο αναζήτησης. Προσαρμόστε τον τόνο και το επίπεδο λεπτομέρειας ανάλογα με τη σημασία της εργασίας.
Πραγματικά μηνύματα σφάλματος: Πριν & Μετά
Η διαφορά μεταξύ ενός μη προσβάσιμου και ενός προσβάσιμου μηνύματος σφάλματος συχνά έγκειται σε λίγες μόνο λέξεις και δύο χαρακτηριστικά. Αυτές οι συγκρίσεις δείχνουν ακριβώς τι αλλάζει — και γιατί κάθε αλλαγή έχει σημασία.
Έλεγχος εγκυρότητας υποχρεωτικών πεδίων
Προβλήματα: Δεν αναγνωρίζεται το οποίο πεδίο. Δεν εκτελεί καμία ενέργεια. Συχνά εμφανίζεται μόνο με αλλαγή χρώματος (δεν πληροί την απαίτηση 1.4.1). Όχι role="alert" αυτό σημαίνει ότι τα προγράμματα ανάγνωσης οθόνης δεν θα το αναγγείλουν.
Γιατί λειτουργεί: Ονομάζει το πεδίο. Εξηγεί γιατί είναι απαραίτητο. Συνδέεται με το πεδίο εισαγωγής μέσω aria-describedby. Αναλογία αντίθεσης κειμένου ≥ 4,5:1. Τα προγράμματα ανάγνωσης οθόνης το ανακοινώνουν κατά την υποβολή μέσω role="alert".
Έλεγχος μορφής (ημερομηνία)
Προβλήματα: Ο χρήστης δεν γνωρίζει ποια μορφή απαιτείται. Τους ενημερώνει για το λάθος, αλλά όχι για τον τρόπο διόρθωσής του. Δεν πληροί την απαίτηση 3.3.3 (Προτάσεις για τη διόρθωση σφαλμάτων). Δεν παρέχεται παράδειγμα.
Γιατί είναι αποτελεσματικό: Καθορίζει την απαιτούμενη μορφή. Παρέχει ένα συγκεκριμένο παράδειγμα (πληροί την απαίτηση 3.3.3). Είναι συνοπτικό και σαφές. Θα αναγγέλλεται αμέσως από τα προγράμματα ανάγνωσης οθόνης όταν ο δείκτης εγκαταλείψει το πεδίο.
Επαλήθευση κωδικού πρόσβασης
Προβλήματα: Ο όρος «αδύναμος» είναι υποκειμενικός και δεν προσφέρει συγκεκριμένη λύση. Συνήθως εμφανίζεται με μια κόκκινη μπάρα έντασης — κάτι που αποτελεί ανατροφοδότηση μόνο μέσω χρώματος (δεν πληροί την απαίτηση 1.4.1). Δεν υπάρχει σχέση μεταξύ της κατάστασης της μπάρας και της εξόδου του AT.
Γιατί είναι αποτελεσματικό: Παραθέτει κάθε απαίτηση. Οι χρήστες μπορούν να εξετάσουν και να αντιμετωπίσουν κάθε κενό. Ο δείκτης ισχύος συμπληρώνει αυτό το κείμενο και χρησιμοποιεί τόσο χρώμα όσο και επιγραφή («Αδύναμο / Ισχυρό»). Καμία πληροφορία δεν μεταφέρεται μόνο μέσω του χρώματος.
Σφάλμα διακομιστή / συστήματος
Προβλήματα: Ο τεχνικός κώδικας δεν έχει νόημα για τους περισσότερους χρήστες. Η ένδειξη «Κάτι πήγε στραβά» δεν προσφέρει καμία οδηγία για το τι πρέπει να κάνουν. Εισάγεται στο DOM χωρίς ζωντανή περιοχή — δεν παρέχει πληροφορίες για τα προγράμματα ανάγνωσης οθόνης. Δεν παρέχεται καμία πρόταση για την επίλυση του προβλήματος.
Γιατί λειτουργεί: Ανθρώπινη γλώσσα. Επιβεβαιώνει τι απέτυχε. Προτείνει δύο σαφείς τρόπους αποκατάστασης. Εισάγεται σε ένα aria-live="assertive" περιοχή, ώστε τα προγράμματα ανάγνωσης οθόνης να την αναγγέλλουν αμέσως. Το εστιακό σημείο μετακινήθηκε στο μήνυμα.
Το καλύτερο μήνυμα σφάλματος είναι αυτό που αποτρέπει εξαρχής την εμφάνιση του σφάλματος. Το δεύτερο καλύτερο μήνυμα σφάλματος είναι αυτό που καθιστά την αποκατάσταση του προβλήματος απολύτως προφανή.
Τύποι σφαλμάτων και πότε να τα χρησιμοποιείτε
Διαφορετικά σενάρια σφαλμάτων απαιτούν διαφορετικούς τρόπους αλληλεπίδρασης. Η επιλογή λανθασμένου πλαισίου ή μηχανισμού ειδοποίησης αποτελεί ένα από τα πιο συνηθισμένα προβλήματα προσβασιμότητας στις φόρμες.
| Μοτίβο | Ιδανικό για | Εφαρμογή του ARIA | Συμπεριφορά εστίασης | Απαιτείται |
|---|---|---|---|---|
| Σφάλμα πεδίου ενσωματωμένου πεδίου | Άμεση επικύρωση σε επίπεδο πεδίου (κατά την απώλεια εστίασης) | aria-invalid="true" + aria-describedby |
Δεν υπάρχει μετακίνηση εστίασης. Ακούγεται σφάλμα κατά την επόμενη εστίαση. | Απαιτείται |
| Πλαίσιο σύνοψης σφαλμάτων | Σφάλματα κατά την υποβολή φορμών πολλαπλών πεδίων | role="alert" ή aria-live="assertive" |
Κατά την υποβολή, μετακινήστε την εστίαση στην επικεφαλίδα της περίληψης. | Απαιτείται για φόρμες με περισσότερα από 3 πεδία |
| Ειδοποίηση για τοστ / σνακ μπαρ | Σφάλματα που δεν σχετίζονται με τη φόρμα (αποτυχία αποθήκευσης, πρόβλημα δικτύου) | role="alert" ή aria-live="assertive" |
ΜΗΝ μετακινήσετε την εστίαση. Αυτόματη απόρριψη μετά από ≥5 δευτερόλεπτα (ή ποτέ). | Συνιστάται |
| Σφάλμα διαλόγου τύπου modal | Επιβεβαίωση καταστροφικής ενέργειας, κρίσιμα σφάλματα | role="dialog" + aria-modal="true" + aria-labelledby |
Μετακίνηση της εστίασης στο πρώτο διαδραστικό στοιχείο μέσα στο παράθυρο διαλόγου. | Για κρίσιμα/μη αναστρέψιμα σφάλματα |
| Περιοχή ειδοποιήσεων σε επίπεδο σελίδας | Εμφανίστηκαν σφάλματα διακομιστή μετά την επαναφόρτωση της σελίδας | role="alert" at top of <main> |
Θα πρέπει να είναι το πρώτο στοιχείο στο οποίο μπορεί να γίνει εστίαση μετά τον σύνδεσμο παράκαμψης. | Απαιτείται εάν υπάρχει κατά τη φόρτωση |
| Ευγενικό μήνυμα κατάστασης | Σχόλια χαμηλής προτεραιότητας (αυτόματη αποθήκευση, παράλειψη προαιρετικού πεδίου) | aria-live="polite" + role="status" |
Δεν υπάρχει μετακίνηση της εστίασης. Θα ανακοινωθεί μετά την ολοκλήρωση της τρέχουσας ομιλίας. | Προαιρετικό / εξαρτάται από το πλαίσιο |
Η προσέγγιση δύο επιπέδων για φόρμες πολλαπλών πεδίων
Για φόρμες με τρία ή περισσότερα πεδία, ένα μόνο πρότυπο δεν αρκεί. Τόσο η Υπηρεσία Ψηφιακών Υπηρεσιών της Κυβέρνησης (GDS) όσο και ο Οδηγός Πρακτικών Σύνταξης ARIA συνιστούν ένα σύστημα δύο επιπέδων: μια σύνοψη σφαλμάτων στο πάνω μέρος της φόρμας, καθώς και ενσωματωμένα μηνύματα σφάλματος δίπλα σε κάθε σχετικό πεδίο.
Σε περίπτωση υποβολής με σφάλματα: (1) Εμφανίστε ένα πλαίσιο σύνοψης σφαλμάτων στο πάνω μέρος της φόρμας με τίτλο όπως «Υπάρχουν 3 σφάλματα. Διορθώστε τα για να συνεχίσετε» και συνδέσμους προς κάθε πεδίο που περιέχει σφάλμα. (2) Μετακινήστε την εστίαση του πληκτρολογίου στον τίτλο αυτής της σύνοψης. (3) Κάθε σύνδεσμος στη σύνοψη μεταφέρει τον χρήστη στο αντίστοιχο πεδίο. (4) Κάθε πεδίο εμφανίζει το δικό του ενσωματωμένο μήνυμα σφάλματος, το οποίο συνδέεται μέσω aria-describedby. Οι χρήστες προγραμμάτων ανάγνωσης οθόνης ακούν και τα δύο επίπεδα· οι χρήστες με όραση βλέπουν και τα δύο επίπεδα. Κανείς δεν μένει πίσω.
Μοτίβα κώδικα που λειτουργούν
Η κατανόηση της θεωρίας είναι το μισό της δουλειάς. Παρακάτω παρατίθενται πρότυπα έτοιμα για χρήση σε παραγωγικό περιβάλλον για τα πιο συνηθισμένα σενάρια, με σχολιασμό σχετικά με τα κριτήρια WCAG που πληροί κάθε χαρακτηριστικό.
Ενσωματωμένος έλεγχος εγκυρότητας πεδίου
<!-- The label is always present and always linked --> <div class="field-group"> <label for="email"> Email address <span class="required-indicator" aria-label="required"> *</span> </label> <input type="email" id="email" name="email" autocomplete="email" aria-required="true" aria-invalid="true" <!-- set when invalid --> aria-describedby="email-hint email-error" /> <!-- Hint text always shown (WCAG 3.3.2) --> <p id="email-hint" class="field-hint"> We'll send your confirmation here. </p> <!-- Error message (shown only on error) --> <p id="email-error" class="field-error" role="alert" aria-live="assertive" > <!-- inject error text here --> Enter a complete email address — for example, [email protected] </p> </div>
Σύνοψη σφαλμάτων (φόρμες πολλαπλών πεδίων)
<!-- Inject this above the form on submission, then focus #error-summary --> <div id="error-summary" role="alert" aria-labelledby="error-summary-title" tabindex="-1" <!-- allows programmatic focus --> class="error-summary" > <h2 id="error-summary-title"> There are 2 errors. Fix these to continue. </h2> <ul> <li><a href="#email">Email address: enter a complete email</a></li> <li><a href="#dob">Date of birth: use DD/MM/YYYY format</a></li> </ul> </div> <!-- JavaScript: move focus to summary after injection --> <script> const summary = document.getElementById('error-summary'); summary.focus(); // fires after DOM update </script>
Σφάλματα δυναμικού περιεχομένου / AJAX (χωρίς ανανέωση της σελίδας)
Όταν τα σφάλματα επιστρέφονται ασύγχρονα — για παράδειγμα, από μια κλήση API — δεν μπορείτε να βασιστείτε στη φόρτωση της σελίδας για να τα εμφανίσετε. Το πρότυπο «ζωντανής περιοχής» (live region) του ARIA είναι απαραίτητο σε αυτή την περίπτωση.
// Set up the live region once on page load (empty, hidden) // <div id="live-error" role="alert" aria-live="assertive" aria-atomic="true"></div> async function submitForm(data) { try { const res = await fetch('/api/save', { method: 'POST', body: data }); if (!res.ok) throw new Error(await res.text()); announceStatus('Your changes have been saved.', 'polite'); } catch (err) { announceStatus( 'We couldn\'t save your changes. Try again or contact support.', 'assertive' ); } } function announceStatus(message, urgency = 'polite') { const region = document.getElementById('live-error'); region.setAttribute('aria-live', urgency); // Clear first to re-trigger announcement if same message region.textContent = ''; requestAnimationFrame(() => { region.textContent = message; }); }
Τα προγράμματα ανάγνωσης οθόνης αναγγέλλουν μόνο το περιεχόμενο που αλλαγές σε μια ενεργή περιοχή. Αν εισαγάγετε το ίδιο μήνυμα σφάλματος δύο φορές στη σειρά, ορισμένα AT δεν θα το ανακοινώσουν ξανά. Η λύση: καθαρίστε την περιοχή ώστε να περιέχει κενή συμβολοσειρά και, στη συνέχεια, συμπληρώστε την με ένα requestAnimationFrame επιστροφή κλήσης. Αυτό επιβάλλει την αλλαγή στο DOM που παρακολουθεί το AT.
Ο κατάλογος ελέγχου για τον έλεγχο προσβασιμότητας
Χρησιμοποιήστε αυτή τη λίστα ελέγχου κατά τη διάρκεια της αναθεώρησης του σχεδιασμού, της αναθεώρησης του κώδικα και του ελέγχου ποιότητας. Καλύπτει όλα τα κριτήρια επιπέδου Α και επιπέδου ΑΑ των WCAG 2.2 που σχετίζονται με τις καταστάσεις σφάλματος.
Οπτική παρουσίαση & περιεχόμενο
- Το σφάλμα κοινοποιείται μέσω κειμένου και όχι μόνο με χρώμα (WCAG 1.4.1)
- Το κείμενο του σφάλματος έχει αναλογία αντίθεσης ≥ 4,5:1 σε σχέση με το φόντο του (WCAG 1.4.3)
- Μια εικόνα ή ένας οπτικός δείκτης συμπληρώνει την αλλαγή χρώματος
- Το μήνυμα σφάλματος αναφέρει το πεδίο ή βρίσκεται ακριβώς δίπλα του
- Το μήνυμα σφάλματος εξηγεί τι ακριβώς συμβαίνει (και όχι απλώς «μη έγκυρο»)
- Το μήνυμα σφάλματος περιλαμβάνει οδηγίες για την επίλυση του σφάλματος (WCAG 3.3.3)
- Παρέχονται παραδείγματα μορφοποίησης για πεδία όπως ημερομηνία, αριθμός τηλεφώνου, ταχυδρομικός κώδικας και άλλα παρόμοια πεδία
- Η γλώσσα είναι απλή, μη τεχνική και δεν αποδίδει ευθύνες
- Το μήνυμα σφάλματος δεν εξαφανίζεται μέχρι να επιλυθεί το σφάλμα
- Οι υποδείξεις μορφοποίησης (π.χ. «ΗΗ/ΜΜ/ΕΕΕΕ») εμφανίζονται πριν από την υποβολή, όχι μόνο όταν υπάρχει σφάλμα
Προγραμματισμός & AT
aria-invalid="true"έχει οριστεί στην εσφαλμένη τιμή εισόδου- Το στοιχείο του μηνύματος σφάλματος συνδέεται μέσω
aria-describedbyστην είσοδο - Χρήσεις του δοχείου σφαλμάτων
role="alert"ήaria-live="assertive" - Η περιοχή σφαλμάτων δεν είναι κενή στο DOM πριν εμφανιστούν σφάλματα (προ-συμπληρωμένος κενός περιέκτης)
- Η σύνοψη σφαλμάτων εμφανίζεται και επισημαίνεται προγραμματικά σε περίπτωση αποτυχίας υποβολής της φόρμας
- Οι σύνδεσμοι της σύνοψης σφαλμάτων οδηγούν στο αντίστοιχο πεδίο της φόρμας
- Οι δοκιμές με προγράμματα ανάγνωσης οθόνης ολοκληρώθηκαν με επιτυχία στα περιβάλλοντα NVDA/Firefox και VoiceOver/Safari
- Ο τίτλος της σελίδας ενημερώνεται ώστε να αντικατοπτρίζει την κατάσταση σφάλματος κατά την υποβολή φορμών πλήρους σελίδας
- Χρήση μηνυμάτων κατάστασης
role="status"μεaria-live="polite"για μη κρίσιμα σχόλια
Εστίαση & πληκτρολόγιο
- Μετά από αποτυχημένη υποβολή, η εστίαση μεταφέρεται στη σύνοψη σφαλμάτων (ή στο πεδίο του πρώτου σφάλματος)
- Ο δείκτης εστίασης είναι ευδιάκριτος σε όλα τα διαδραστικά στοιχεία που βρίσκονται σε κατάσταση σφάλματος (WCAG 2.4.11)
- Τα παράθυρα διαλόγου σφαλμάτων που εμφανίζονται σε μόνιμη κατάσταση συγκρατούν την εστίαση εντός του παραθύρου διαλόγου
- Η απόρριψη ενός σφάλματος (π.χ. το κλείσιμο ενός αναδυόμενου μηνύματος) επαναφέρει την εστίαση σε μια λογική θέση
- Καμία ενέργεια δεν απαιτεί τη χρήση συσκευής κατάδειξης
- Τα σφάλματα λόγω λήξης χρόνου αναμονής παρέχουν επαρκή προειδοποίηση και χρόνο για την παράταση της περιόδου σύνδεσης (WCAG 2.2.1)
Το WCAG 3.3.6 (Πρόληψη σφαλμάτων — Όλα) απαιτεί να παρέχετε στους χρήστες τη δυνατότητα να ελέγχουν, να επιβεβαιώνουν και να ακυρώνουν όλες τις υποβολές — όχι μόνο τις οικονομικές. Αν και πρόκειται για επίπεδο AAA και δεν αποτελεί νομική απαίτηση στις περισσότερες περιπτώσεις, μειώνει σημαντικά το άγχος που προκαλείται από τα σφάλματα στους χρήστες με γνωστικές αναπηρίες. Θεωρήστε το ως τον ιδανικό στόχο που αξίζει να επιδιώξετε.
Πώς φτάσαμε εδώ: Μια σύντομη χρονολογική αναδρομή
role="alert" και aria-live πρότυπα. Επιτέλους είναι εφικτή η συνεπής υποστήριξη από προγράμματα περιήγησης και βοηθητικά προγράμματα πρόσβασης για δυναμικές ανακοινώσεις σφαλμάτων.
Τα μηνύματα σφάλματος ως καθρέφτης των αξιών του προϊόντος σας
Το μήνυμα σφάλματος αποτελεί μια από τις πιο αποκαλυπτικές στιγμές σε κάθε ψηφιακή εμπειρία. Εμφανίζεται ακριβώς τη στιγμή που ο χρήστης βρίσκεται υπό πίεση — όταν έχει κάνει κάποιο λάθος ή όταν κάτι πέρα από τον έλεγχό του έχει πάει στραβά. Το πώς αντιδράτε εκείνη τη στιγμή λέει τα πάντα για το πόσο σοβαρά αντιμετωπίζετε το θέμα της ένταξης.
Ένα κόκκινο περίγραμμα χωρίς κείμενο δεν αποτελεί μήνυμα σφάλματος. Μια απλή απεικόνιση κώδικα δεν αποτελεί μήνυμα σφάλματος. Μια αόριστη φράση όπως «κάτι πήγε στραβά» δεν αποτελεί μήνυμα σφάλματος. Ένα προσβάσιμο μήνυμα σφάλματος είναι μια σαφής, ευγενική και πρακτική επικοινωνία που απευθύνεται σε όλους — συμπεριλαμβανομένου του 26% των χρηστών που αντιμετωπίζουν κάποια μορφή αναπηρίας, του 15% που βασίζονται στην πλοήγηση μέσω πληκτρολογίου και του 100% των χρηστών που θα αντιμετωπίσουν κάποιο σφάλμα κάποια στιγμή.
Η προσβασιμότητα δεν είναι απλώς μια λειτουργία. Είναι ένα χαρακτηριστικό ποιότητας κάθε λειτουργίας που κυκλοφορείτε — και τα μηνύματα σφάλματος είναι το σημείο όπου αυτή η ποιότητα δοκιμάζεται υπό τις πιο αντίξοες συνθήκες.
Τα καλά νέα είναι ότι τα προσβάσιμα μηνύματα σφάλματος απαιτούν ελάχιστη επιπλέον προσπάθεια, αρκεί να ενσωματωθούν από την αρχή. Τα χαρακτηριστικά ARIA είναι ελάχιστα. Οι οδηγίες σύνταξης είναι σαφείς. Τα πρότυπα είναι καθιερωμένα. Αυτό που απαιτείται είναι η πρόθεση — μια συνειδητή απόφαση να γίνονται δοκιμές με βοηθητικές τεχνολογίες, να γράφουμε για ανθρώπους και όχι για συστήματα, και να αντιμετωπίζουμε κάθε κατάσταση αποτυχίας ως ευκαιρία να κερδίσουμε την εμπιστοσύνη.
Στην AIOPSGROUP, μια εταιρεία του ομίλου valantic, δημιουργούμε ψηφιακά προϊόντα που εξυπηρετούν όλους. Η μηχανική προσβασιμότητας είναι ενσωματωμένη στο σύστημα σχεδιασμού μας, στις αναθεωρήσεις κώδικα και στη διαδικασία διασφάλισης ποιότητας — δεν προστίθεται απλώς στο τέλος. Αν η ομάδα σας χρειάζεται βοήθεια για τον έλεγχο, την εφαρμογή ή τη δημιουργία ενός προσβάσιμου συστήματος σχεδιασμού από το μηδέν, θα χαρούμε να σας βοηθήσουμε.
Σύντομη αναφορά WCAG 2.2 — Βοήθεια εισαγωγής · Οδηγός πρακτικών δημιουργίας περιεχομένου ARIA · Στοιχείο μηνυμάτων σφάλματος GDS · Έκθεση WebAIM Million 2024