3.3.7Poziom A

Ponowne wprowadzanie danych

Redundant Entry

Dane wymagane ponownie w tym samym procesie uzupełnij lub udostępnij do wyboru, poza wyjątkami niezbędności, bezpieczeństwa i utraty ważności.

Komu pomaga
Pamięć i koncentracjaOgraniczenia ruchowe
Zastosowanie
WWWAplikacje mobilneAplikacje desktopoweDokumenty cyfroweInne urządzenia

Warunki i wyjątki opisano w artykule.

Wersja
WCAG 2.2, wprowadzone w 2.2
Zasada / wytyczna
Zrozumiałość / 3.3
Stan researchu
Draft AI. Bez przeglądu człowieka.
Redakcja artykułu
· wersja robocza
Na tej stronie

Co oznacza to kryterium

W tej samej czynności nie każ użytkownikowi przepisywać danych, które już podał lub które wcześniej pokazał mu system. Uzupełnij je w kolejnym wymaganym polu, udostępnij do wyboru albo usuń zbędne pytanie. Ponowne wejście może mieć uzasadnienie w niezbędności, bezpieczeństwie treści lub rzeczywistej utracie ważności informacji.

Potrzeba według wspólnego słownika Bariera i korzyść
cognitive — Pamięć i koncentracja Powtarzanie adresu lub numeru obciąża pamięć roboczą i zwiększa ryzyko pomyłki. Przywrócenie danych pozwala kontynuować bez przypominania ich sobie.
motor — Ograniczenia ruchowe Każde dodatkowe wpisanie wymaga kolejnych działań, szczególnie przy przełącznikach lub dyktowaniu. Wybór wartości ogranicza zbędne wejście.

Nie przypisujemy automatycznie barw, słuchu ani wszystkich potrzeb wzrokowych. Dostępność przycisku i pola dla technologii asystującej trzeba oceniać osobno.

Przykłady błędów i poprawek

Odbiór w Pracowni ma dwa kroki. Contact zaczyna się od wpisania ola@example.com; drugi krok wymaga tego samego kontaktu. Reference najpierw pokazuje przydzielony P-104, a potem żąda tego numeru. Wartości są syntetyczne, operacje lokalne, walidacja bada tylko niepusty wpis.

Wariant Problem, poprawka lub kontrola
Good Uzupełnia wcześniejszą wartość przy wejściu w krok 2 i pozwala ją edytować oraz zapisać bez przepisywania.
Bad To samo wymagane pole jest puste, wcześniejsza wartość niedostępna; pusty zapis odrzucony. Powtórny wpis umożliwia zapis, ale nie usuwa bariery.
Select Pole puste, lecz właściwa wcześniejsza wartość widoczna i działający przycisk ją przenosi. To poprawna alternatywa dla automatycznego uzupełnienia.
Control Nowe opcjonalne uwagi, przyjmowane także puste; to inne dane i inny warunek, nie identyczna para good/bad.

Good/bad mają te same dane, etykiety, kroki i walidację. Różnicę stanowi przeniesienie wcześniejszej informacji. Ukryte dane w DOM nie są dostępnym wyborem.

iOS contact: pierwszy krok z wpisanym ola@example.com.

Ponowienie iOS 2026-10-04, Flutter/Cupertino. Źródło wartości jest wcześniejszym krokiem tej samej aktywności.

iOS contact good: drugi krok automatycznie zawiera wcześniejszy adres.

Rzeczywisty XCTest i natywny odczyt pola potwierdzają przeniesienie; zapis powiódł się bez drugiego wpisania.

iOS contact bad: to samo wymagane pole jest puste, bez wyboru wcześniejszej wartości.

Zapis pustego pola odrzucono, a przyjęto dopiero po ponownym wpisaniu. PASS testu oznacza odtworzenie bariery bad.

iOS select: puste pole, widoczny wcześniejszy adres i przycisk jego użycia.

Samo puste pole nie narusza wymagania, gdy działa dostępny wybór.

iOS select po dotknięciu: wcześniejszy adres znalazł się w polu.

Zwykłe dotknięcie rzeczywiście uzupełniło pole i pozwoliło zapisać. Sekwencja nie jest testem VoiceOver.

Informacja przekazana przez system

P-104 nie był wpisem użytkownika. Po Dalej good przenosi go do pola i przyjmuje zapis bez przepisywania; bad, select i control mają analogiczne obserwacje w historii źródła.

iOS reference: system przekazał użytkownikowi numer P-104.

Numeru nie wpisywano w pierwszym kroku: wymaganie obejmuje też informacje przekazane przez system.

iOS reference good: drugi krok uzupełniony przekazanym P-104.

Przejście przeniosło numer i przyjęło zapis bez przepisywania. Walidacja badała tylko niepustą wartość.

Web contact good: wcześniejszy adres uzupełniony w drugim kroku.

Pierwotna odrębna próba IAB/macOS, 2026-10-04. To HTML/JS, bez przypisywania kadru Flutterowi lub mobilnemu testowi.

Edycja, powrót i granica procesu

Edycja w drugim kroku zostaje po Wstecz/Dalej, jeśli źródło się nie zmieniło. Zmiana kontaktu w pierwszym kroku uzupełnia nowe źródło w good, a w pozostałych wariantach czyści drugie pole; select pokazuje nowe źródło i pozwala go użyć. Zmiana wariantu czyści proces, reset przywraca początkowy wariant trasy, nieznana para wraca do contact/good. Nie są to alternatywy spełnienia badanego warunku.

Kiedy obowiązuje i gdzie są wyjątki

Proces to ciąg działań koniecznych do zakończenia jednej aktywności. W naszym przykładzie podanie kontaktu lub odczyt przydzielonego numeru, przejście i zapis potwierdzenia należą do jednego odbioru. Zmiana widoku, etykiety pola lub dostawcy kroku nie wystarcza, by uznać czynność za nowy proces. Nie wymagamy zachowania danych po zamknięciu sesji czy odejściu z procesu i późniejszym powrocie.

Wymaganie jest alternatywą: uzupełnienie albo wybór. Można też usunąć zbędne pytanie. Wybór może przybrać formę przycisku, listy, pola „te same dane” lub zaznaczenia i skopiowania tekstu znajdującego się na tej samej stronie. Dane mogą być w rozwijanym bloku; nie trzeba automatycznie wypełniać każdego pola. Sama pamięć przeglądarki, autocomplete czy menedżer haseł nie zapewniają, że treść udostępnia wcześniejszą wartość w procesie.

Wyjątek Granica i przykład interpretacji
Ponowne wejście niezbędne Usunięcie go zmieniłoby istotę informacji lub funkcji, a celu nie da się osiągnąć zgodną drogą. Przykład: próba pamięciowa, w której ujawnienie odpowiedzi unieważnia zadanie. Wygoda implementacji nie dowodzi niezbędności.
Bezpieczeństwo treści Ponowne wprowadzenie chroni treść, np. ponowne potwierdzenie nowego, niewyświetlanego hasła. Nie oznacza to wyjątku dla każdego pola nazwiska lub e-maila. Uzasadnienie ocenić w konkretnym procesie; wymagania dostępnego uwierzytelniania pozostają osobne.
Utrata ważności wcześniejszej informacji Można żądać aktualnej wartości, gdy poprzednia rzeczywiście przestała być ważna. Samo wyczyszczenie stanu po nawigacji nie dowodzi utraty ważności danych.

Wyjątków nie uruchomiono w demonstracji: e-mail i P-104 pozostają ważne; nie ma procesu bezpieczeństwa ani gry pamięciowej. Przy informacji wprowadzonej inną metodą, np. załączonym CV, nie należy automatycznie traktować późniejszych pól tekstowych jako odtworzenia tego samego wejścia. To granica interpretacji Understanding, nie czwarty wyjątek dopisany do normatywnej listy.

Nie każda zgodność tekstu oznacza tożsamość informacji: adres nadawcy i adres innego odbiorcy mogą być różnymi danymi. Potwierdzenie e-maila dla ograniczenia literówek samo nie dowodzi bezpieczeństwa lub niezbędności. Własny scenariusz świadomie żąda tego samego kontaktu. W przypadku błędu innego pola zachowaj nadal ważne informacje, zamiast wymuszać cały formularz od początku; sam opis błędu bada 3.3.1.

Kryterium nie ustanawia odrębnego wyjątku dla danych osobowych. Ponowne użycie trzeba połączyć z ochroną danych; nasz przykład używa pamięci procesu, nie trwałego magazynu. Nie wyświetlaj danych innej osoby ani innego procesu tylko po to, by uzupełnić pole.

Techniki i błędy

G221 jest techniką wystarczającą dostarczania wcześniejszych danych: zarówno wpisanych, jak i wygenerowanych przez system. Sprawdzenie obejmuje rozpoznanie powtórzenia w procesie oraz udostępnienie wartości w późniejszym kroku. Przejrzana wersja techniki ma aktualizację 2026-03-09. Technika jest pomocnicza; nie trzeba implementować dokładnie jednego z jej przykładów.

Understanding i Quick Reference nie podają obecnie oznaczonego numerem F błędu dla 3.3.7; nie wymyślamy takiego identyfikatora. Pominięcie drugiego żądania jest także wskazanym rozwiązaniem, opisanym jako potencjalna przyszła technika, bez nadanego ID. Wariant bad to nasze odtworzenie normatywnego warunku, bez danych o częstości takiej usterki.

Platformy

Warunek: w ramach tej samej aktywności wymagane są informacje już wpisane przez użytkownika lub przekazane mu przez system. W poniższej tabeli „dotyczy warunkowo” odnosi się do tego warunku i wyjątków, a nie do dostępności testu. Ocena AI 2026-10-04; wszystkie wiersze pozostają draftem interpretacji.

Środowisko / ID Podstawa, wersja / kryterium Stan Zakres, adaptacja i uzasadnienie Wykonanie
WWW / web WCAG 2.2, rekomendacja 2024-12-12 / 3.3.7 dotyczy warunkowo Bez adaptacji. Jeden proces może obejmować wiele stron, jedną aplikację webową lub domeny różnych dostawców. Także przeglądarka telefonu. Lokalna przeglądarka na macOS: wykonano opisaną próbę; przeglądarka telefonu NOT-RUN.
Aplikacje mobilne / mobile WCAG2ICT 2.2, W3C Group Note 2025-12-11 / 3.3.7 dotyczy warunkowo WCAG2ICT stosuje wymaganie bez zmiany do oprogramowania. Dwukrokowy formularz natywny może wymagać tego samego e-maila lub przydzielonego numeru. Flutter: analiza i host PASS w pierwotnej sesji; świeży build i rzeczywisty XCTest iOS PASS w ponowieniu. Android NOT-RUN.
Aplikacje desktopowe / desktop WCAG2ICT 2.2, Group Note 2025-12-11 / 3.3.7 dotyczy warunkowo Bez zmiany wymagania dla oprogramowania; potrzebna pamięć procesu, nie automatyczne archiwum poprzednich sesji. NOT-RUN
Dokumenty cyfrowe / document WCAG2ICT 2.2, Group Note 2025-12-11 / 3.3.7 dotyczy warunkowo Interaktywny dokument z powtarzanym wejściem; bez zmiany wymagania. Dokument do czytania nie uruchamia tego warunku. NOT-RUN
Inne urządzenia / other — formularz kiosku WCAG2ICT 2.2, Group Note 2025-12-11 / 3.3.7 dla oprogramowania dotyczy warunkowo Ten sam proces w interfejsie kiosku; bez zmiany wymagania. Sprzęt i zamknięta funkcjonalność wymagają osobnej oceny. NOT-RUN

WCAG2ICT jest wskazówką interpretacyjną, nie normą zgodności ani rozstrzygnięciem obowiązku prawnego. W hybrydzie rozdzielić część WWW i natywną. Opisany wariant control nie uruchamia warunku ponownego wejścia: uwagi są nową informacją. Nie wyłącza to kryterium dla całej platformy.

Rozwiązania w technologiach

Wspólny kontrakt: previousEmail pochodzi z wcześniejszego kroku tego samego procesu. Nie jest kontem innej osoby ani domyślną stałą produktu. Poniższe fragmenty pokazują wybór wartości; automatyczne uzupełnienie w demonstracji wykonuje się przy przejściu, a nie przy każdym renderze, żeby nie usuwać ręcznych zmian. Stan i jego czas życia należą do właściciela procesu.

Flutter / Dart

import 'package:flutter/cupertino.dart';

Widget reuseEmail(String previousEmail, TextEditingController current) =>
  Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
    const Text('Adres e-mail (wymagane)'),
    Semantics(label: 'Adres e-mail (wymagane)',
      child: CupertinoTextField(controller: current)),
    Text('Wcześniejsze dane: $previousEmail'),
    CupertinoButton(onPressed: () => current.text = previousEmail,
      child: const Text('Użyj wcześniejszych danych')),
  ]);

Zmiana controller.text aktualizuje pole. Kontroler utworzyć poza build i zwolnić w dispose; nie liczyć na samo autofillHints. Pełna demonstracja ma oba kontrolery we wspólnym StatefulWidget. Skrótu nie kompilowano jako osobnego celu; równoważna mechanika w aplikacji ma analizę, testy hostowe i build.

iOS / SwiftUI

import SwiftUI

struct ReuseEmail: View {
    let previousEmail: String
    @Binding var current: String
    var body: some View {
        VStack(alignment: .leading) {
            Text("Adres e-mail (wymagane)")
            TextField("Adres e-mail (wymagane)", text: $current)
            Text("Wcześniejsze dane: \(previousEmail)")
            Button("Użyj wcześniejszych danych") { current = previousEmail }
        }
    }
}

Właściciel przepływu przechowuje bieżącą wartość i przekazuje binding; przejście ekranów nie może usuwać wcześniejszych danych. API Binding wiąże pole ze wspólnym stanem. textContentType i systemowy autofill pomagają przy wejściu, ale nie wykonują tego kontraktu same.

Android / Jetpack Compose

import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Button
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable

@Composable
fun ReuseEmail(previousEmail: String, current: String, onChange: (String) -> Unit) {
    Column {
        OutlinedTextField(value = current, onValueChange = onChange,
            label = { Text("Adres e-mail (wymagane)") })
        Text("Wcześniejsze dane: $previousEmail")
        Button(onClick = { onChange(previousEmail) }) {
            Text("Użyj wcześniejszych danych")
        }
    }
}

Wyniesienie stanu do właściciela procesu umożliwia użycie go pomiędzy krokami. Samo remember w usuwanym ekranie nie zapewnia zachowania wartości. Nie dodajemy trwałego zapisu wyłącznie dla 3.3.7; wymagania odtwarzania po zakończeniu procesu rozstrzyga produkt.

React Native / TypeScript

import React from 'react';
import { Button, Text, TextInput, View } from 'react-native';

type Props = {
  previousEmail: string;
  current: string;
  onChange: (v: string) => void;
};
export function ReuseEmail({ previousEmail, current, onChange }: Props) {
  return (
    <View>
      <Text>Adres e-mail (wymagane)</Text>
      <TextInput
        value={current}
        onChangeText={onChange}
        accessibilityLabel="Adres e-mail (wymagane)"
      />
      <Text>Wcześniejsze dane: {previousEmail}</Text>
      <Button
        title="Użyj wcześniejszych danych"
        onPress={() => onChange(previousEmail)}
      />
    </View>
  );
}

Kontrolowany TextInput otrzymuje wartość i callback od właściciela przepływu, np. stanu komponentu obejmującego oba kroki. autoComplete nie zastępuje przekazania wcześniejszej wartości przez treść. Nie ustawiaj wartości ponownie przy każdej aktualizacji, jeśli użytkownik już ją poprawił.

HTML / CSS / JavaScript

Rzeczywisty formularz HTML/JavaScript przechowuje wcześniejszą wartość w pamięci procesu. Good uzupełnia input.value przy przejściu, select robi to po zwykłym kliknięciu przycisku, a bad żąda ponownego wpisania. autocomplete="off" oddziela tę mechanikę od pamięci przeglądarki. Wariant wyboru musi pokazać właściwą wcześniejszą wartość i rzeczywiście przyjąć ją w bieżącym kroku.

Technologia Przegląd oficjalnego API AI 2026-10-04 Kompilacja Działanie
Flutter 3.44.9 / Dart 3.12.2 TextEditingController, CupertinoTextField/Button: sprawdzone Pełna demonstracja iOS Simulator PASS Host PASS; rzeczywisty iOS/XCTest PASS w ponowieniu
SwiftUI TextField, Binding oraz przechowywanie stanu w hierarchii: sprawdzone NOT-RUN NOT-RUN
Jetpack Compose Wyniesienie stanu, value/onValueChange, Button: sprawdzone NOT-RUN NOT-RUN
React Native value/onChangeText, Button onPress i stan właściciela: sprawdzone NOT-RUN NOT-RUN
HTML / JavaScript — html-js input.value, zdarzenia formularza/przycisku: sprawdzone Statyczne pliki, bez builda frameworka Rzeczywista przeglądarka: wykonano próbę

Fragmenty SwiftUI, Compose i React Native są edukacyjne i nie były kompilowane ani uruchamiane. Przegląd API nie potwierdza dostępności sterowania ani odczytu przez AT.

Jak sprawdzić

  1. Zdefiniuj aktywność i jej początek/koniec. Zanotuj informacje wpisane przez użytkownika i przekazane mu, w tym identyfikatory wygenerowane w procesie.
  2. Przejdź rzeczywistą drogą do późniejszego żądania. Ustal, czy potrzebna jest ta sama informacja, a nie inne dane z podobną etykietą. Zweryfikuj ewentualną niezbędność, bezpieczeństwo lub utratę ważności.
  3. Bez dodatkowego wpisania sprawdź wartość pola lub działający wybór wcześniejszych danych w tym kroku. Wyłącz zależność wniosku od pamięci/autofill przeglądarki. W naszej demonstracji pola mają autocomplete="off", a działanie potwierdzają odczyty i kod przeniesienia.
  4. W contact wpisz ola@example.com, Dalej i Zapisz. Oczekiwane good: drugi krok wypełniony i zapisany; bad: pusty, odrzucony bez kolejnego wejścia; select: pusty, ale działający przycisk uzupełnia i pozwala zapisać. Control przyjmuje puste nowe uwagi.
  5. W reference zacznij od pokazanego P-104; nie wpisuj go w kroku 1. Oczekiwane wyniki analogiczne. To test informacji przekazanej, nie tylko wpisanej.
  6. Zmień wartość w kroku 2, przejdź Wstecz/Dalej; powinna zostać zachowana, jeśli źródło się nie zmieniło. Sprawdź też zmianę źródła, błąd wejścia oraz reset, żeby nie pomylić ponownego użycia z nieaktualną stałą lub danymi innego procesu.

Pierwotna próba i późniejsze iOS

Obie części źródła mają datę 2026-10-04; wcześniejsze NOT-RUN nie opisuje aktualnego braku wykonania.

Kontrola Rzeczywisty wynik
Pierwotny Flutter Format/analiza PASS, 10 testów 3.3.7 oraz 49 hostowych regresji PASS. Build iOS PASS bez instalacji/runtime w tej części.
Pierwotny web Contact/reference good, bad, select, control, edycja/powrót, reset/fallback wykonane. Zmiana źródła hostowo, webowo NOT-RUN. 27 AX/DOM, 32 grupy działań, siedem JPEG.
Pierwotne iOS/XCTest/media/VoiceOver Historyczne NOT-RUN przez wcześniejszą przeszkodę; bez nowej diagnostyki w tej części. Pierwotny plan drivera też nie był skompilowany.
Odczyt webowy Pierwszy DOM nie powstał, bo obserwator nie miał navigator.userAgent; skorygowano obserwator, bez podmiany wyniku. Silnik i DPR nieustalone; kadry 1265×712 lub 1280×720.
Ponowienie iOS Świeży build/install/driver PASS; 65 plików zainstalowanej aplikacji zgodnych z buildem. XCTest PASS: 378,553 s, osiem konfiguracji i dwa fallbacki.
Zakres ponowienia Good przenosi i zapisuje bez wpisania; bad odrzuca pusty i akceptuje dopiero powtórny wpis; select działa; control przyjmuje nowe puste uwagi. Edycja/powrót w ośmiu konfiguracjach i zmiana źródła w czterech contact wykonane.
Odczyty i media iOS 89 stanów/drzew AX/value, 125 rekordów wejść i 12 PNG; AI obejrzała wszystkie. Liczba wejść obejmuje launch/terminate i przewinięcia, bez utożsamiania z dotknięciami lub znakami.
Integralność Osobny checker ponowienia PASS; 483 wcześniejsze assety, pierwotne metadane i wyniki zachowane. Dawny checker nadal ma hash dawnego planu i historyczną Potrzebną decyzję.

Ponowienie: iPhone 17 / iOS 26.5 Simulator, Flutter 3.44.9 / Dart 3.12.2, Xcode 27.0 / SDK 27.0, macOS 27.0. Odczyt light/content size large; 402×874 pt, PNG 1206×2622. Nie naprawiano usług ani nie restartowano hosta. Przyczyna dawnej przeszkody pozostaje nieustalona: PASS nie dowodzi jej naprawy.

Weryfikacja i ograniczenia

Rzeczywiste wejścia i odczyty potwierdzają mechanikę własnej fixture. Kadry są sekwencyjne, nie atomowe; obraz sam nie dowodzi historii lub skutku wyboru. Puste pole daje fałszywy alarm dla select/control; podobny tekst może oznaczać inną osobę lub cel. DOM może przechowywać ukryte dane, a samo Wstecz i zapamiętanie wartości nie udostępnia jej w wymaganym kroku. AI ocenia znaczenie i wyjątki, bez zatwierdzenia człowieka. Oczekiwania i nazwy wariantów nie należą do wejścia przyszłego zaślepionego walidatora.

Jak sprawdza Clearship

Deterministyczny redundant-entry-auth-1 śledzi w P0 kroki formularza lub przejścia do przodu przy tym samym tytule ekranu. Łączy wcześniejsze pola i tekst „nazwa: wartość” z nowym polem przez frazę nazwy, cel wejścia lub rodzinę podpowiedzi autouzupełniania. Wskazuje puste pole wymagające tej samej informacji, jeżeli krok nie ma innej kontrolki poza wysłaniem i powrotem.

Wybór danych, wskazówka wyjątku, nowa informacja i znaczenie poza regułami idą do człowieka. Zmiana tytułu może przerwać śledzenie; przypadkowy dodatkowy przycisk może ukryć usterkę. Metoda nie sprawdza skuteczności wyboru, wszystkich dostawców, dowolnej równoważności znaczenia ani treści webowej.

Kontrolne próby Androida z 8 października i iOS z 9 października 2026 r.: 4/6 usterek, 0/20 fałszywych alarmów na każdej platformie, below-threshold. Próg nie został spełniony, więc brak znalezisk nie uprawnia do wyniku „nie znaleziono w zbadanym zakresie”. Nowszy pomiar produktu nie zmienia daty źródłowego researchu; jego udana demonstracja nie podnosi skuteczności detektora.

Powiązane kryteria