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.