Après avoir chargé le composant qui contient des entrées. Comment puis-je me concentrer sur ce champ particulier?
TextField.svelte
<script>
import TextField from './TextField'
import {onMount} from 'svete'
onMount(() => {
// This line is funny.. I know
document.querySelector('[name="firstname"]').focus()
})
</script>
<TextField label="First Name" name="firstname" />
App.svelte p >
<script>
export let label = ''
export let name = ''
export let placeholder = ''
export let value = ''
</script>
<div class="field">
<label for={name}>{label}</label>
<input {placeholder} type="text" {name} bind:value={value} >
<slot></slot>
</div>
3 Réponses :
Vous pouvez utiliser l'attribut autofocus .
<script>
export let label = ''
export let name = ''
export let placeholder = ''
export let value = ''
</script>
<div class="field">
<label for={name}>{label}</label>
<input {placeholder} type="text" {name} bind:value={value} autofocus > // <-- here
<slot></slot>
</div>
Mais comme indiqué dans cette réponse , ce n'est probablement pas une bonne idée du point de vue de l'accessibilité.
De nos jours, cela déclenchera un avertissement: A11y: évitez d'utiliser l'autofocussvelte (a11y-autofocus) . Donc, comme l'a déclaré le PO, ce n'est probablement pas la voie à suivre.
Vous pouvez obtenir une référence au nœud DOM d'entrée avec bind: this et l'exporter comme accessoire et l'utiliser dans le composant parent.
Exemple
<!-- TextField.svelte -->
<script>
export let label = '';
export let name = '';
export let placeholder = '';
export let value = '';
export let ref = null;
</script>
<div class="field">
<label for={name}>{label}</label>
<input {placeholder} type="text" {name} bind:value={value} bind:this={ref} >
<slot></slot>
</div>
<!-- App.svelte -->
<script>
import TextField from './TextField.svelte';
import { onMount } from 'svelte';
let ref;
onMount(() => {
ref.focus();
});
</script>
<TextField label="First Name" name="firstname" bind:ref />
Avez-vous essayé ce code? ref.focus () ne semble pas fonctionner pour moi alors que je suis capable de changer d'autres propriétés d'élément en utilisant ref .
Vous avez en fait plusieurs fautes de frappe dans App.svelte .
Tout d'abord, importez le composant.
<script> import TextField from './TextField.svelte'; </script> <TextField label="First Name" name="firstname" focused/> <TextField label="Last Name" name="lastname" focused/>
Cela devrait être:
<script>
import { onMount } from 'svelte';
export let focused = false;
export let label = '';
export let name = '';
export let placeholder = '';
export let value = '';
let elm;
onMount(function() {
elm.focus();
});
</script>
<div class="field">
<label for={name}>{label}</label>
<input {placeholder} type="text" {name} bind:value={value} bind:this={elm}/>
<slot/>
</div>
Deuxièmement, le paquet Svelte lui-même.
import { onMount } from 'svelte';
Cela devrait être:
import {onMount} from 'svete'
Ne pas modifier ma question pour les fautes de frappe stupides afin que les précieuses lignes que vous avez écrites restent pertinentes :)
Ma question contient des fautes de frappe. Voir la réponse ci-dessous pour référence.