Skip to content

Commit 836a41f

Browse files
committed
add unique ids to form labels
1 parent afaa723 commit 836a41f

File tree

1 file changed

+30
-22
lines changed

1 file changed

+30
-22
lines changed

src/js/components/FeedbackFormBasic/index.svelte

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
summaryError = $state(),
1010
descriptionError = $state(false);
1111
12+
const id = $props.id();
13+
const form = `form#${id}`;
14+
1215
//takes long string output of document.cookie and splits it into a usable javascript object
1316
let cookies = document.cookie
1417
.split(';')
@@ -26,8 +29,6 @@
2629
2730
/**
2831
* @typedef {Object} Props
29-
* @property {any} [id]
30-
* @property {any} [form]
3132
* @property {any} postResponseStatusCode
3233
* @property {boolean} [loading] - when true, spinner on submit button animates
3334
* @property {boolean} [hidden] - when true, hides the element (in this case, the form)
@@ -38,8 +39,6 @@
3839
3940
/** @type {Props} */
4041
let {
41-
id = `id${new Date().getTime()}`,
42-
form = `form#${id}`,
4342
postResponseStatusCode = $bindable(),
4443
loading = $bindable(false),
4544
hidden = $bindable(false),
@@ -86,16 +85,16 @@
8685
event.stopPropagation();
8786
loading = false;
8887
formValid.classList.add('was-validated');
89-
if (formValid.querySelector('#name.form-control:invalid')) {
88+
if (formValid.querySelector(`#${id}-name.form-control:invalid`)) {
9089
nameError = true;
9190
}
92-
if (formValid.querySelector('#email.form-control:invalid')) {
91+
if (formValid.querySelector(`#${id}-email.form-control:invalid`)) {
9392
emailError = true;
9493
}
95-
if (formValid.querySelector('#summary.form-control:invalid')) {
94+
if (formValid.querySelector(`#${id}-summary.form-control:invalid`)) {
9695
summaryError = true;
9796
}
98-
if (formValid.querySelector('#description.form-control:invalid')) {
97+
if (formValid.querySelector(`#${id}-description.form-control:invalid`)) {
9998
descriptionError = true;
10099
}
101100
errorMessage = true;
@@ -143,70 +142,79 @@
143142
<main>
144143
<form {onsubmit} class:hidden class="needs-validation mb-3" name="feedback" novalidate {id}>
145144
<div class="mb-3">
146-
<label for="name" class="form-label">Name <span class="required" aria-hidden="true">(required)</span> </label>
145+
<label for="{id}-name" class="form-label"
146+
>Name <span class="required" aria-hidden="true">(required)</span>
147+
</label>
147148
<input
148149
aria-describedby="name-error"
149150
type="name"
150151
class="form-control"
151-
id="name"
152+
id="{id}-name"
152153
name="name"
153154
autocomplete="name"
154155
required
155156
/>
156-
<div class="invalid-feedback" id="name-error">
157+
<div class="invalid-feedback" id="{id}-name-error">
157158
{#if nameError}
158159
<span>Error: Please provide your name.</span>
159160
{/if}
160161
</div>
161162
</div>
162163
<div class="mb-3">
163-
<label for="email" class="form-label"
164+
<label for="{id}-email" class="form-label"
164165
>Email address <span class="required" aria-hidden="true">(required)</span></label
165166
>
166167
<input
167168
type="email"
168169
class="form-control"
169-
id="email"
170+
id="{id}-email"
170171
name="email"
171172
aria-describedby="email-error"
172173
autocomplete="email"
173174
required
174175
/>
175-
<div class="invalid-feedback" id="email-error">
176+
<div class="invalid-feedback" id="{id}-email-error">
176177
{#if emailError}<span>Error: Please provide an email address.</span>{/if}
177178
</div>
178179
</div>
179180
<div class="mb-3">
180-
<label for="summary" class="form-label"
181+
<label for="{id}-summary" class="form-label"
181182
>Short summary <span class="required" aria-hidden="true">(required)</span></label
182183
>
183-
<input type="text" class="form-control" id="summary" name="summary" aria-describedby="summary-error" required />
184-
<div class="invalid-feedback" id="summary-error">
184+
<input
185+
type="text"
186+
class="form-control"
187+
id="{id}-summary"
188+
name="summary"
189+
aria-describedby="summary-error"
190+
required
191+
/>
192+
<div class="invalid-feedback" id="{id}-summary-error">
185193
{#if summaryError}<span>Error: Please provide a title or subject line to summarize your feedback.</span>{/if}
186194
</div>
187195
</div>
188196
<div class="mb-3">
189-
<label for="bookDescription" class="form-label"
197+
<label for="{id}-bookDescription" class="form-label"
190198
>If your question is related to a specific book, what is the title or URL? <span
191199
class="required"
192200
aria-hidden="true">(optional)</span
193201
></label
194202
>
195-
<input type="text" class="form-control" id="bookDescription" name="bookDescription" />
203+
<input type="text" class="form-control" id="{id}-bookDescription" name="bookDescription" />
196204
</div>
197205
<div class="mb-3">
198-
<label for="description" class="form-label"
206+
<label for="{id}-description" class="form-label"
199207
>Full description of problem or question <span class="required" aria-hidden="true">(required)</span></label
200208
>
201209
<textarea
202210
class="form-control"
203211
aria-describedby="description-error"
204-
id="description"
212+
id="{id}-description"
205213
name="description"
206214
rows="3"
207215
required
208216
></textarea>
209-
<div class="invalid-feedback" id="description-error">
217+
<div class="invalid-feedback" id="{id}-description-error">
210218
{#if descriptionError}<span
211219
>Error: Please provide some background or details for your feedback or question.</span
212220
>{/if}

0 commit comments

Comments
 (0)