Jak ustawić fokus na komponencie material-ui TextField
?Jak ustawić fokus na materialu TextField?
componentDidMount() {
ReactDom.findDomNode(this.refs.myControl).focus()
}
Próbowałem powyżej kodu, ale to nie działa :(
Jak ustawić fokus na komponencie material-ui TextField
?Jak ustawić fokus na materialu TextField?
componentDidMount() {
ReactDom.findDomNode(this.refs.myControl).focus()
}
Próbowałem powyżej kodu, ale to nie działa :(
Można użyć atrybutu autoFocus
.
<TextField value="some value" autoFocus />
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();
};
To nie działa poprawnie w React. –
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? –
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.
NB to autoFocus –
Dzięki! Dobry połów. –
Działa po załadowaniu strony, ale nie po przesłaniu formularza. –