Proprietà campo di blocco Forms adattivo

In questo documento viene riepilogato il modo in cui lo schema JSON viene mappato su HTML sottoposto a rendering in blocks/form/form.js, concentrandosi su come vengono identificati e renderizzati i campi, sui pattern comuni e sulle differenze specifiche dei campi.

Identificazione Dei Campi (fieldType)

Ogni campo nello schema JSON ha una proprietà fieldType che determina come viene eseguito il rendering. fieldType può essere:

  • Tipo speciale
    Esempi: drop-down, radio-group, checkbox-group, panel, plain-text, image, heading, ecc.
  • Tipo di input HTML valido
    Esempi: text, number, email, date, password, tel, range, file, ecc.
  • Tipo con suffisso -input
    Esempi: text-input, number-input, ecc. normalizzato al tipo di base, ad esempio text, number.

Se fieldType corrisponde a un tipo speciale, viene utilizzato un renderer personalizzato. In caso contrario, verrà trattato come tipo di input predefinito.

Vedere le sezioni seguenti per la struttura e le proprietà complete di HTML per ogni tipo di campo.

Proprietà comuni utilizzate dai campi

Di seguito sono riportate le proprietà utilizzate dalla maggior parte dei campi:

  • id: specifica l'ID dell'elemento e supporta l'accessibilità.
  • name: definisce l'attributo name per gli elementi di input, selezione o set di campi.
  • label.value, label.richText, label.visible: specifica l'etichetta/testo della legenda, il contenuto di HTML e la visibilità.
  • value: rappresenta il valore corrente del campo.
  • required: aggiunge l'attributo required o i dati di convalida.
  • readOnly, enabled: controlla se il campo è modificabile o disabilitato.
  • description: visualizza il testo della Guida sotto il campo.
  • tooltip: imposta l'attributo title per gli input.
  • constraintMessages: fornisce messaggi di errore personalizzati come attributi di dati.

Struttura comune di HTML

Il rendering della maggior parte dei campi viene eseguito all'interno di un wrapper che include un'etichetta e un testo di aiuto facoltativo. Lo snippet seguente illustra la struttura:

<div class="<fieldType>-wrapper field-wrapper field-<name>" data-id="<id>">
<label for="<id>" class="field-label">Label</label>
<!-- Field-specific input/element here -->
<div class="field-description" id="<id>-description">Description or error
message</div>
</div>

Per i gruppi (radio/casella di controllo) e i pannelli, viene utilizzato <fieldset> con <legend> invece di <div>/<label>. Testo della guida

è presente solo se è impostata la descrizione.

Visualizzazione messaggio di errore

I messaggi di errore vengono visualizzati nello stesso elemento .field-description utilizzato per il testo della Guida, che viene aggiornato dinamicamente.

Quando un campo non è valido:

Quando il campo diventa valido:

I messaggi di errore personalizzati possono essere definiti utilizzando la proprietà constraintMessages nel JSON.
Questi vengono aggiunti come data-<constraint>ErrorMessage attributi nel wrapper (ad esempio, data-requiredErrorMessage).

Tipi di input predefiniti (HTML Input o *-input)

Se fieldType non è un tipo speciale, verrà considerato come un tipo di input HTML standard o come <type>-input, ad esempio text, number, email, date, text-input, number-input.

Vincoli per i tipi di input predefiniti

I vincoli vengono aggiunti come attributi sull’elemento di input in base alle proprietà JSON.

Proprietà JSON
Attributo HTML
Si applica a
maxLength
maxlength
testo, e-mail, password, tel
minLength
minlength
testo, e-mail, password, tel
pattern
pattern
testo, e-mail, password, tel
massimo
max
numero, intervallo, data
minimo
min.
numero, intervallo, data
passaggio
passaggio
numero, intervallo, data
accetta
accetta
file
multiplo
multiplo
file
maxOccur
data-max
pannello
minOccur
data-min
pannello
NOTE
multiple è una proprietà booleana. Se true, viene aggiunto l'attributo multiple.

Questi attributi vengono impostati automaticamente dal renderer del modulo in base alla definizione JSON del campo.

Esempio: struttura HTML con vincoli

L’esempio seguente illustra come viene eseguito il rendering di un campo numerico con vincoli di convalida e attributi di gestione degli errori.

<div class="number-wrapper field-wrapper field-age" data-id="age"
data-required="true"
data-minimumErrorMessage="Too small" data-maximumErrorMessage="Too large">
<label for="age" class="field-label">Age</label>
<input type="number"
id="age" name="age"
value="30" required min="18"
max="99" step="1"
placeholder="Enter your age" />
<div class="field-description" id="age-description"> Description or error message
</div>
</div>

Ogni parte della struttura di HTML svolge un ruolo nell'associazione dati, nella convalida e nella visualizzazione di messaggi di aiuto o di errore.

Proprietà specifiche dei campi e relative strutture HTML

Elenchi a discesa

Proprietà aggiuntive:

Esempio:

<div class="drop-down-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true"
data-requiredErrorMessage="This field is required">
<label for="<id>" class="field-label">Label</label>
<select id="<id>" name="<name>" required title="Tooltip" multiple>
<option disabled selected value="">Placeholder</option>
<option value="opt1">Option 1</option>
<option value="opt2">Option 2</option>
</select>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Testo normale

Proprietà aggiuntive:

Esempio:

<div class="plain-text-wrapper field-wrapper field-<name>" data-id="<id>">
<label for="<id>" class="field-label">Label</label>
<p>Text or <a href="..." target="_blank">link</a></p>
</div>

Casella di controllo

Proprietà aggiuntive:

Esempio:

<div class="checkbox-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true"
data-requiredErrorMessage="Please check this box">
<label for="<id>" class="field-label">Label</label>
<input type="checkbox"
id="<id>"
name="<name>" value="on"
required
data-unchecked-value="off" />
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Pulsante

Proprietà aggiuntive:

Esempio:

<div class="button-wrapper field-wrapper field-<name>" data-id="<id>">
<button id="<id>" name="<name>" type="submit" class="button"> Label
</button>
</div>

Ingresso multiriga

Proprietà aggiuntive:

Esempio:

<div class="multiline-wrapper field-wrapper field-<name>" data-id="<id>"
data-minLengthErrorMessage="Too short" data-maxLengthErrorMessage="Too long">
<label for="<id>" class="field-label">Label</label>
<textarea id="<id>"
name="<name>" required
minlength="2"
maxlength="100"
pattern="[A-Za-z]+"
placeholder="Type here..."></textarea>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Pannello

Proprietà aggiuntive:

Esempio:

<fieldset class="panel-wrapper field-wrapper field-<name>" data-id="<id>"
name="<name>"
data-repeatable="true" data-index="0">
<legend class="field-label">Label</legend>
<!-- Nested fields here -->
<button type="button" class="add">Add</button>
<button type="button" class="remove">Remove</button>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</fieldset>

Pulsante di scelta

Proprietà aggiuntive:

Esempio:

<div class="radio-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true">
<label for="<id>" class="field-label">Label</label>
<input type="radio" id="<id>" name="<name>" value="opt1" required />
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Gruppo pulsanti di scelta

Proprietà aggiuntive:

Esempio:

<fieldset class="radio-group-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true">
<legend class="field-label">Label</legend>
<div>
<input type="radio" id="<id>-0" name="<name>" value="opt1" required />
<label for="<id>-0">Option 1</label>
</div>
<div>
<input type="radio" id="<id>-1" name="<name>" value="opt2" />
<label for="<id>-1">Option 2</label>
</div>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</fieldset>

Gruppo di caselle di controllo

Proprietà aggiuntive:

Esempio:

<fieldset class="checkbox-group-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true" data-minItems="1"
data-maxItems="3">
<legend class="field-label">Label</legend>
<div>
<input type="checkbox" id="<id>-0" name="<name>" value="opt1" required />
<label for="<id>-0">Option 1</label>
</div>
<div>
<input type="checkbox" id="<id>-1" name="<name>" value="opt2" />
<label for="<id>-1">Option 2</label>
</div>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</fieldset>

Immagine

Proprietà aggiuntive:

Esempio:

<div class="image-wrapper field-wrapper field-<name>" data-id="<id>">
<picture>
<img src="..." alt="..." />
<!-- Optimized sources -->
</picture>
</div>

Intestazione

Proprietà aggiuntive:

Esempio:

<div class="heading-wrapper field-wrapper field-<name>" data-id="<id>">
<h2 id="<id>">Heading Text</h2>
</div>

Per ulteriori dettagli, vedere l'implementazione in blocks/form/form.js e blocks/form/util.js.

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab