Codice Form
Struttura della pagina
<header>
{% include html_docs/header/topbar_dropdown.html %}
{% include html_docs/header/header_menu-oriz.html %}
{% include esempi-lombardia/menu_orizzontale.html %}
</header>
<main>
<div class="container">
<form class="my-5" id="justValidate" action="index.html" method="post">
{% include esempi-lombardia/account_posta.html %}
{% include esempi-lombardia/indirizzo.html %}
{% include esempi-lombardia/datepickers.html %}
{% include esempi-lombardia/radiobuttons.html %}
{% include esempi-lombardia/checkboxes.html %}
{% include esempi-lombardia/toggles.html %}
<!-- *****************************************************************************************************+ -->
<div class="row">
<div class="col-12">
<div class="float-end">
<button type="button" class="btn btn-outline-primary">Annulla</button>
<button type="submit" class="btn btn-primary">Invio</button>
</div>
</div>
</div>
<!-- *****************************************************************************************************+ -->
</form>
<div class="container">
<div class="row">
<div class="col-12">
<div aria-live="polite" id="errorMsgContainer"></div>
</div>
</div>
</div>
</div> <!-- end container -->
</main>
{% include html_docs/footer/footer.html %}
La struttura anche in questo caso è semplice:
Il tag <header>
contienela barra istituzionale composta da:
- topbar
- header_menu-oriz
descritta più sotto. - il menu_orizzontale
Nel tag <main>
il <div class="container">
mantiene il form compatto al centro dello schermo, lasciando spazio in bianco ai lati sugli schermi di ampie dimensioni.
Inoltre, per staccare verticalmente i campi del form dal menù orizzontale è stata usata la classe my-5
sul tag del form.
header_menu-oriz
<div class="it-header-center-wrapper it25-barra-ist">
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div class="it-header-center-content-wrapper">
<div class="it-brand-wrapper">
<div class="it25-hamburger-btn-wrapper">
<button
id="btn-hamburger"
class="custom-navbar-toggler btn btn-xs"
type="button"
aria-controls="nav1"
aria-expanded="false"
aria-label="Mostra/Nascondi la navigazione"
data-bs-toggle="navbarcollapsible"
data-bs-target="#nav1"
>
<svg class="icon icon-primary">
<use xlink:href="/bootstrap-lombardia/dist/svg/sprites.svg#it-burger"></use>
</svg>
</button>
</div>
<a href="#">
<img src="/bootstrap-lombardia/dist/assets/img/logo-rl.png"
alt="logo regione lombardia" class="it25-header-logo d-none d-md-block" />
<div class="it-brand-text">ACRONIMO Nome applicativo</div>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
La validazione
La validazione dell’input, a titolo di esempio, è stata realizzata con il seguente script a fondo pagina:
<script>
document.addEventListener('DOMContentLoaded', function () {
const errorMessage =
'<div class="alert alert-danger alert-dismissible fade show" role="alert"><strong>Attenzione</strong> Alcuni campi inseriti sono da controllare.<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Chiudi avviso"></div>'
const errorWrapper = document.querySelector('#errorMsgContainer')
const validate = new bootstrap.FormValidate('#justValidate', {
errorFieldCssClass: 'is-invalid',
errorLabelCssClass: 'form-feedback',
errorLabelStyle: '',
focusInvalidField: false,
})
validate
.addField('#inputEmail4', [
{
rule: 'required',
errorMessage: 'Questo campo è richiesto',
},
{
rule: 'email',
errorMessage: 'Inserire email corretta',
},
])
.addField('#exampleInputPassword9', [
{
rule: 'required',
errorMessage: 'Questo campo è richiesto',
},
])
.addField('#formNome', [
{
rule: 'required',
errorMessage: 'Questo campo è richiesto',
},
])
.addField('#formCognome', [
{
rule: 'required',
errorMessage: 'Questo campo è richiesto',
sucessMessage: 'Validato',
},
])
.addField('#inputAddress', [
{
rule: 'required',
errorMessage: 'Questo campo è richiesto',
},
])
.addField('#civico', [
{
rule: 'required',
errorMessage: 'Questo campo è richiesto',
},
])
.addField('#inputCity', [
{
rule: 'required',
errorMessage: 'Questo campo è richiesto',
},
])
.addField('#inputCAP', [
{
rule: 'required',
errorMessage: 'Questo campo è richiesto',
},
{
rule: 'minNumber',
value: 20001,
errorMessage: 'I CAP della Lombardia sono superiori a 20000',
},
{
rule: 'maxNumber',
value: 46100,
errorMessage: 'I CAP della Lombardia non sono superiori a 46100',
}
])
.addField('#defaultSelect', [
{
rule: 'required',
errorMessage: 'Questo campo è richiesto',
},
])
.addField('#data_nascita', [
{
rule: 'required',
errorMessage: 'Questo campo è richiesto',
},
])
.addField('#accessibleAutocomplete', [
{
rule: 'required',
errorMessage: 'Questo campo è richiesto',
},
{
validator: (value) => {
return ['Bergamo', 'Brescia', 'Como', 'Cremona', 'Lecco', 'Lodi', 'Mantova', 'Monza e della Brianza', 'Milano', 'Sondrio', 'Varese'].includes(value);
},
errorMessage: 'Puoi scegliere solo province lombarde',
},
])
.addRequiredGroup('#group_mezzi0', 'Scegli almeno un’opzione')
.addRequiredGroup('#group_mezzi2', 'Scegli almeno un’opzione')
.onSuccess((event) => {
document.forms['justValidate'].submit()
})
.onFail((fields) => {
errorWrapper.innerHTML = ''
errorWrapper.innerHTML = errorMessage
errorWrapper.scrollIntoView()
})
})
</script>