2016-06-21 10 views

Odpowiedz

8

Można użyć atrybutu autoFocus.

<TextField value="some value" autoFocus /> 
+0

NB to autoFocus –

+0

Dzięki! Dobry połów. –

+0

Działa po załadowaniu strony, ale nie po przesłaniu formularza. –

-1

natknąłem to pytanie szuka rozwiązania tego samego problemu Znalazłem około autoFocus, ale okazało się, że działa tylko wtedy, gdy strona ładuje się po raz pierwszy, a nie po przesłaniu formularza. Sposób, w jaki udało mi się go znaleźć, polega na dodaniu ref do dziecka TextField i wywołanie select() na formularzu przedłożyć:

<form onSubmit={this.onSubmit}> 
      <TextField ref="amountComp" ... /> 
</form> 

i

onSubmit(event: any): void { 
    // save form 
    (this.refs["amountComp"] as TextField).select(); 
}; 
+0

To nie działa poprawnie w React. –

+0

Co masz na myśli mówiąc "nie działa on natywnie w React"? AFAIK 'ref' to sposób Reacta na udostępnienie podkreślonego elementu DOM, dzięki czemu możesz zrobić takie rzeczy jak ... wywołanie zwykłego javascript' domelement.select() ', aby ustawić ostrość! A może masz wątpliwości co do drugiego fragmentu kodu, który jest maszynopisem, a nie javascript? –

2

autoFocus nie pracuje również dla mnie, być może, ponieważ jest to element, który nie jest zamontowany, gdy ładunki składowe najwyższego poziomu. Musiałem zrobić coś o wiele bardziej zawiłe, aby zmusić go do pracy:

const focusUsernameInputField = input => { 
    if (input) { 
    setTimeout(() => {input.focus()}, 100); 
    } 
}; 

return (
    <TextField 
    hintText="Username" 
    floatingLabelText="Username" 
    ref={focusUsernameInputField} 
    /> 
); 

Należy zauważyć, że z jakiegoś powodu nie działa bez setTimeout. Aby uzyskać więcej informacji, patrz https://github.com/callemall/material-ui/issues/1594.

Powiązane problemy