рдЬрдм рдкреНрд░рдкрддреНрд░ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рдШрдЯрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо / рдкрд╛рд╕рд╡рд░реНрдб рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдЖрдо) рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрднреА-рдХрднреА рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдХреЛ рд░реЗрдВрдбрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рди рдкрд░ рдСрдирдХреЙрдиреНрдЧ рдЗрд╡реЗрдВрдЯреНрд╕ рдлрд╛рдпрд░рд┐рдВрдЧ рди рд╣реЛред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдкрддреНрд░ рд╕рдмрдорд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдШрдЯрдХ рд╕реНрдерд┐рддрд┐ рдпрд╣ рдирд╣реАрдВ рджрд░реНрд╢рд╛рддреА рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрдпрд╛ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред
рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдкрд░, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд▓реЛрдб рдкрд░ рд╣реИ (рдпрд╣ log.refs.myinput.getDOMNode () рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореВрд▓реНрдп
рдпрд╣ рдЗрд╕ рдкрд░ рдХреБрдЫ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ: http://stackoverflow.com/a/11710295
рдПрдЯреАрдПрдо рдореИрдВ рдЗрд╕ https://github.com/tbosch/autofill-event рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдореБрдЭреЗ рд╕реА.рд╕реА.
( @visionscaper рдЯрд┐рдк: рджрд╛рдПрдВ рдХреЙрд▓рдо рдкрд░ "рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ" рджрдмрд╛рдПрдВред)
рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди рдпрд╛ рдЗрд╕ рдкрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛? рдСрдЯреЛрдлрд┐рд▓ рдЗрд╡реЗрдВрдЯ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдПрдХ рд╕реНрд▓реЗрдЬрд╣реЗрдорд░ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред
рд╕рдлрд╛рд░реА (8) рдСрдЯреЛрдлрд┐рд▓ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреЗрдЬрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдмреБрд▓рдмреБрд▓рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИрдВрдбрд▓рд░ рддрдХ рди рдкрд╣реБрдВрдЪреЗрдВред
Https://github.com/angular/angular.js/issues/1460 рдкрд░ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░реНрдЪрд╛ рдмрдВрдж рдХрд░ рджреА рдЧрдИ, рдХреБрдЫ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ https://github.com/tbosch/autofill-event рдХреЛ рдЖрдЧ рдореЗрдВ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдо рдпрд╣рд╛рдБ рднреА рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрднрд╡ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдСрдЯреЛрдлрд┐рд▓-рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХрд╛рд░реНрдпрд╢реАрд▓рддрд╛ рд╡рд╕реНрддреБрддрдГ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡реЗ рдлреЙрд░реНрдо рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдСрдЯреЛрдлрд┐рд▓-рдЗрд╡реЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ jQuery рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рднреА рдЬреЛрдбрд╝рддреА рд╣реИ, рдЬреЛ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реЛ рд╕рдХрддреА рд╣реИред
рдпрд╣ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрдЧ рд╣реИ рдЬреЛ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдгреАрдп рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдпрд╛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ "рд╡реЙрдиреНрдЯрдлрд┐рдХреНрд╕" рд╣реИред
рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмрдЧ рдЯреНрд░реИрдХрд░реНрд╕ рдкрд░ рд╕реБрдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд╛рдХрд┐рдл рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрджреНрджреЛрдВ рдХреЛ рдЦреЛрдЬ рдпрд╛ рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЯреАрдо рдХрд╛ рд╡рдЬрди рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рддрдм рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рддреЗ рд╣реИрдВред рдФрд░ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рдПрдХреНрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЯрд┐рдХрдЯ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдХреЛрдгреАрдп рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдкрдХрдбрд╝рд╛ред рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдлрд╝реАрд▓реНрдб (https://bugzilla.mozilla.org/show_bug.cgi?id=950510 рдЕрднреА рднреА рдЦреБрд▓рд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд╕рдлрд╛рд░реА рдХреЗ рдмрдЧ # рдкрд░ рдХреЛрдИ рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИ, рдХреНрд░реЛрдо рддрдп рд╣реИред
рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдореБрджреНрджреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - https://github.com/angular/angular.js/issues/1460#issuecomment -53947546
рдХреНрд░реЛрдо рдореБрджреНрджрд╛ рдЕрдм рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреНрд░реЛрдо 50 рдореЗрдВ рд░рд┐рдПрдХреНрдЯ 0.14.8 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЕрднреА рддрдХ рдХреЛрдИ рдареАрдХ рдирд╣реАрдВ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛?
рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрджреНрдпрддрди?
рдпрд╣рд╛рдБ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдЙрджреНрдзрд░рдг:
export default class Input extends Component {
static propTypes = {
value: PropTypes.string,
onFieldChange: PropTypes.func,
};
static defaultProps = {
value: '',
}
componentDidMount() {
this._listener = setInterval(() => {
if (!this.input || this._previousValue === this.input.value) {
return;
}
this._previousValue = this.input.value;
const evt = document.createEvent('HTMLEvents');
evt.initEvent('input', true, true);
this.input.dispatchEvent(evt);
}, 20);
}
componentWillUnmount() {
clearInterval(this._listener);
}
refInput = (input) => this.input = input;
render() {
const { label,
value,
onFieldChange,
} = this.props;
this.input = this.input || { value };
return (
<input
value={this.input.value}
onChange={onFieldChange}
ref={this.refInput}
/>
);
}
}
рдиреЛрдЯ: value
рд░рд╛рдЬреНрдп рд╕реЗ рдЖрддрд╛ рд╣реИ рдФрд░ onFieldChange
рдирдП рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ
рд╕реЗрдЯрдЗрдВрдЯрд░рд╡рд▓ рдХреЛрдб https://github.com/Pephers/react-autofill рд╕реЗ рд╣реИ
рдХреНрдпрд╛ рдХреЛрдИ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ iOS 10.2 рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдореИрдВ рдЗрд╕реЗ рдЕрдм рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ...
рдореБрдЭреЗ рдЕрднреА рднреА iOS 10.2 рдкрд░ рдХреНрд░реЛрдо рд╡рд░реНрдЬрди 55.0.2883.79 рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ ... рдЬреЛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдлрд╝реЙрд░реНрдо рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рддреЛ рдпрд╣ рдЕрдм рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдСрдЯреЛрдлрд┐рд▓ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ...
рдореИрдВ @irisSchaffer рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордирд╛ рдХрд┐рдП рдЧрдП рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЖрдЗрд╕реЛрдореЙрд░реНрдлрд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рдЬрд╣рд╛рдВ рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ, рдлрд┐рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдореИрдВ рдкреНрд░реЙрдкрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрд╕реА рдкреЗрдЬ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рдЗрдирдкреБрдЯ рдореВрд▓реНрдп рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЧреНрд░рд╛рд╣рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдЗрдирдкреБрдЯ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рддрдм рднреА рдЬрдм рдХреНрд░реЛрдо рдЗрд╕реЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдЕрдкрдиреА рдЬрдЧрд╣ рдкрд░ рд░рд╣рддрд╛ рд╣реИред
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ Chrome рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ, рдЗрд╕рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг, 58 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ, рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдПрд▓реАрдореЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реИред рддрдм рддрдХ, рдЬрдм рддрдХ рдбреЛрдо рдкрд░ рдЧреЛрд▓реАрдмрд╛рд░реА рдХреА рдЧрдИ рдШрдЯрдирд╛, рдЬреИрд╕реЗ рдлреЛрдХрд╕, рдХрд┐рд╕реА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдирд╛, рдЖрджрд┐ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдИрд╡реЗрдВрдЯ рдлрд╛рдпрд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рдорд╛рди рдореЗрдВ рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ рд╣реИред рд╕рдВрдкрддреНрддрд┐ред
+1ред рдХреЛрдИ рдлрд┐рдХреНрд╕ рдпрд╛ рд╣реИрдХ?
рдореИрдВ рдЕрднреА рднреА iOS 10.3.3 рдХреНрд░реЛрдо 60.0.3112.89 iOS рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рд╕реНрд╡рдд: рднрд░рдг рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдлрд╝реАрд▓реНрдб рднрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд╛рдЬреНрдп рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛рдо-рдХреЗ рдЖрд╕рдкрд╛рд╕: https://github.com/Pephers/react-autofill
рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдХ рдХрд╛рдо рдХреЗ рдЖрд╕рдкрд╛рд╕:
/**
Trigger onChange event after browser auto-fill.
<strong i="8">@see</strong> https://github.com/facebook/react/issues/1159
<strong i="9">@example</strong> <AutoFillWatch component={ref =>
<input required type="password" ref={ref} />
}/>
*/
class AutoFillWatch extends Component {
static propTypes = {
// Auto-fill component like: <input type="password"
component: PropTypes.func.isRequired,
// component pass-through reference
ref: PropTypes.func,
}
componentDidMount() {
this._listener = setInterval(() => {
if (!this.input || this._previousValue === this.input.value) {
return;
}
this._previousValue = this.input.value;
const evt = document.createEvent('HTMLEvents');
evt.initEvent('input', true, true);
this.input.dispatchEvent(evt);
}, 100);
}
componentWillUnmount() {
clearInterval(this._listener);
}
componentDidMount() {
const {ref} = this.props
if(ref) {
console.log('ref', this.input);
ref(this.input)
}
}
refInput = (input) => this.input = input;
render() {
const {component} = this.props
return component(this.refInput)
}
}
IOS рдХреЗ рд▓рд┐рдП рдХреНрд░реЛрдо (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдХреНрд░реЛрдо рд╕реЗ рдСрдЯреЛрдлрд┐рд▓ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдИрдУрдПрд╕ рдХреАрдмреЛрд░реНрдб рд╕реЗ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ) рдХреЗрд╡рд▓ рдСрдЯреЛрдлрд┐рд▓рд┐рдВрдЧ рдореВрд▓реНрдпреЛрдВ рдХреЗ рджреМрд░рд╛рди change
рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░ рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╛рд░реА focus
, keydown
, input
, keyup
, change
рдФрд░ blur
, рдХреЗ рд░реВрдк рдореЗрдВ
React change
рдЗрд╡реЗрдВрдЯ рдХрд╛ рдирд┐рдпрдорд┐рдд <input />
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдореВрд▓ рдХрд╛рд░рдг рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ: https://github.com/facebook/react/blob/e932ad68bed656eedb29295b61ba74e5d0857902ed/src/renderers /dom/sared/eventPlugins/ChangeEventPlugin.js#L66 -L71
рдХреНрдпрд╛ рд░рд┐рдПрдХреНрдЯ onChange
рднреА DOM change
рдШрдЯрдирд╛рдУрдВ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛? рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рд╣реЛрдЧрд╛?
Chrome iOS рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛: https://bugs.chromium.org/p/chromium/issues/detail?id/707575
рдореИрдВрдиреЗ рдирд┐рдореНрди рдЫреЛрдЯреЗ рдкреГрд╖реНрда рдХреЗ рд╕рд╛рде рдСрдЯреЛрдлрд┐рд▓рд┐рдВрдЧ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ:
<html>
<head>
<script type="text/javascript">
window.onload = function () {
let elements = document.querySelectorAll('input');
let actions = document.getElementById('actions')
let events = 'focus blur keydown keyup change input'.split(' ');
elements.forEach(element => {
events.forEach(event => {
element.addEventListener(event, e => {
console.log(e);
let eTypeNode = document.createTextNode(element.name + ' > ' + e.type + ":" + e.code + ":" + e.keyIdentifier);
actions.appendChild(eTypeNode);
actions.appendChild(document.createElement('br'));
})
})
})
};
</script>
</head>
<body>
<form>
<input type="text" name="name" id="a" autocomplete="name" />
<input type="email" name="email" id="b" autocomplete="email" />
<input type="tel" name="tel" id="c" autocomplete="tel" />
</form>
<div id="actions"></div>
</body>
</html>
рдЬрдм рдЖрдк <form />
рддрддреНрд╡ рд╕реЗ рдЗрдирдкреБрдЯ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рддреЛ Chrome v62 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдИрд╡реЗрдВрдЯ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдПрдХ onInput рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ theres рдЬреЛ рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдПрдХ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди рд▓реЗрдЧрд╛ред
рдЕрднреА рднреА рдЖрдИрдУрдПрд╕ рдкрд░ рдСрдЯреЛрдлрд┐рд▓ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЗрдЦрдХрд░ред рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдСрдЯреЛрдлрд┐рд▓ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕рд░рд▓ рдСрдЯреЛрдлрд┐рд▓ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреАрдмреЛрд░реНрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдСрдЯреЛрдлрд┐рд▓ рд╢реЙрд░реНрдЯрдХрдЯ рдирд╣реАрдВред
рдЗрд╕реЗ рдЕрднреА iOS рдХреЗ рд▓рд┐рдП Chrome рдореЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: https://chromium.googlesource.com/chromium/src/+/55518e17850cac0bdc6fca7b24092bea479e34dbред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрдм рдЗрд╕ рдкреИрдЪ рдХреЛ рдПрдХ рдЬрд╛рд░реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
OnChange рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рд╣рдо 'рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐' рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ 'рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛'
class Input extends Component {
componentDidMount(){
this.input.addEventListener('change', (e)=>{
this.props.onChange(this.props.field, e.target.value)
})
}
render(){
const { className, name, label, autofill, field, onBlur, onChange, value, error, visited, required, type, maxLength } = this.props
return (
<div className={ [styles.inputWrap, className || ''].join(' ') } onBlur={e => onBlur(field)}>
<input ref={n => this.input = n} id={field} name={name || field} type={ type || 'text' } defaultValue={ value }
autoComplete={ autofill } maxLength={maxLength} />
<div className={ [styles.placeholder, value? styles.active:''].join(' ') }>
<FormattedMessage id={label} />
<i className={styles.required}>{required? '*':''}</i>
<span className={ styles.error }>{ visited? error:'' }</span>
</div>
</div>
)
}
}
рдЬрдм рдЖрдк
<form />
рддрддреНрд╡ рд╕реЗ рдЗрдирдкреБрдЯ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рддреЛ Chrome v62 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдИрд╡реЗрдВрдЯ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди autoComplete="tel"
рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝реЛрди рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП Chrome рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
https://github.com/catamphetamine/react-phone-number-input/issues/101
рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди this._previousValue !== this.input.value
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХреЗрд╡рд▓ iOS рд╕рдлрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред iOS рдХреНрд░реЛрдо рдХрд╛ .value
рдПрдХ рдСрдЯреЛрдлрд┐рд▓ рдХреЗ рдмрд╛рдж рднреА рдЦрд╛рд▓реА рд╣реИред
рдореБрдЭреЗ рдХреЛрдИ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдирд┐рдпрдВрддреНрд░рд┐рдд рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд▓реЛрдЧ рдХреИрд╕реЗ рд░реВрдкреЛрдВ рдореЗрдВ рдСрдЯреЛрдлрд┐рд▓ рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рд▓реЙрдЧрд┐рди рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
.value
рдЦрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛рдЬрдм рддрдХ рдХрд┐ рдХреНрд░реЛрдо рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдШрдЯрдХреЛрдВ, рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдкреБрд░рд╛рдиреЗ рджрд┐рдиреЛрдВ рдХреА рддрд░рд╣ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдкрд░ рдлрд╝реЙрд░реНрдо рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛, рддрдм рддрдХ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЯреНрд░реИрдХ (рдФрд░ рд╕реНрдЯрд╛рд░) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://bugs.chromium.org/p/chromium/issues/detail?id=813175
рдореБрдЭреЗ @DominicTobias рдпрд╛ рддреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдХрдИ рдкрд░рддреЗрдВ рд╣реИрдВред рдкрд╣рд▓рд╛ рдпрд╣ рдерд╛ рдХрд┐ this.input.value
рд╣рдореЗрд╢рд╛ рд░рд┐рдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрддреЗ рдереЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛, рдХрд┐ рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд▓реВрдк рдореЗрдВ document.getElementById
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ document.getElementById(id).value
- рдЖрдкрдХреЛ рдПрдХ рдорд╛рди рд╡рд╛рдкрд╕ рдорд┐рд▓реЗрдЧрд╛ред
рдпрд╣ dispatchEvent
рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЖрдк рд╕реНрд╡рдд: рдкреВрд░реНрдг рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рдЗрдирдкреБрдЯ рдХреЗ onChange
рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛)ред
@ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ (рдФрд░ рдХрд┐рддрдирд╛ рдЕрдЬреАрдм)! рдореБрдЭреЗ рдЙрд╕ рдорд╛рд░реНрдЧ рд╕реЗ рдиреАрдЪреЗ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рд╡реЗ рдореЗрд░реА рд░рд┐рд╣рд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рдордп рдкрд░ рдмрдЧ рдХреЛ рдареАрдХ рди рдХрд░реЗрдВ
@wlingke рдХреНрд░реЛрдо рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдореЛ рд╕реЗрдЯ onChange
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдШрдЯрдирд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ change
рдШрдЯрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред
рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдбреЗрдореЛ рдореЗрдВ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ input
рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реБрди рд░рд╣рд╛ рд╣реИред рдЬрдм рдЖрдк рдЕрд╕рд▓реА change
рдШрдЯрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ iOS рдХреНрд░реЛрдо рдореЗрдВ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рддреЛ рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рддрддреНрд╡ рдХреЛ рдПрдХ рд░реЗрдлрд░реА рдорд┐рд▓рдирд╛ рдФрд░ рд╕рд┐рд░реНрдл рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рдХреЛ рд╕реБрдирдирд╛, рд╕рд╛рде рд╣реА onChange
рдШрдЯрдирд╛ рдЬреЛ input
рдШрдЯрдирд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рд░рд╛рдЬреНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд╛рдЗрдк рдХрд░ рд░рд╣рд╛ рд╣реИред
рдбреЗрдореЛ: https://kind-stallman-f3c045.netlify.com/
@DominicTobias рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рджреЛрдиреЛрдВ change
рдФрд░ input
рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рдПрдХ рдмрд╛рд░ рджреЛрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЪреАрдЬреЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИрдВ .. рд▓реЗрдХрд┐рди рдПрдХ рдЕрдВрддрд░ рд╣реИ рдЬрдм рдПрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдСрдЯреЛрдлрд┐рд▓рд┐рдВрдЧ рдХрд░рдирд╛ MULTIPLE рдлрд╝реАрд▓реНрдб рдХреЛ рдСрдЯреЛрдлрд╝рд┐рд▓ рдХрд░рдирд╛ред input
рдШрдЯрдирд╛ рдиреЗ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЛрдмрд╛рдЗрд▓ рдХреНрд░реЛрдо рдореЗрдВ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреАрдмреЛрд░реНрдб рд╕реЗ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХрд╛ рдПрдХ рд╕реЗрдЯ рдСрдЯреЛрдлрд╝рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдлрд░реНрд╕реНрдЯрдиреЗрдо, рд▓рд╛рд╕реНрдЯрдирд╛рдо, рдИрдореЗрд▓ рд╕рднреА рдПрдХ рдЯреИрдк рд╕реЗ)ред
рдЙрд╕ рджреВрд╕рд░реЗ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рдбреЗрдХреЛрд░реЗрдЯрд░ рдкрд╣рд▓реЗ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдСрдЯреЛрдлрд╝рд┐рд▓ рдХрд░рддрд╛ рд╣реИ (рдкрд╣рд▓рд╛ рдлрд╝реАрд▓реНрдб рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлрд╝реЛрдХрд╕ рд╣реИ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдбреЗрдХреЛрд░реЗрдЯрд░ (рдЬреЛ рд╕рднреА 3 рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ), рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
@wlingke рд░реБрдЪрд┐рдХрд░, рдореИрдВрдиреЗ рдХреБрдЫ рдФрд░ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗ, рд▓реЗрдХрд┐рди рдЬрдм iOS рдХреНрд░реЛрдо рдореЗрдВ рддреАрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде
(рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдкрдиреЗ рдлрд╝реЛрди рдкрд░ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ)
@DominicTobias рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк input
рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдЬреЛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рддреЛ рдпрд╣ рдбреЗрд╕реНрдХрдЯреЙрдк рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдореЗрдВ рдкрд╣рд▓реЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдВред
input
рдШрдЯрдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП onChange
рдирд┐рдХрдЯрддрдо рд╣реИред рддрддреНрд╡ рдХреЗ рдмрд╛рдж change
рдШрдЯрдирд╛ рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЦреЛ рджреЗрддреА рд╣реИ рдЬреЛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (https://stackoverflow.com/questions/17047497/what-is-the-difference-between-change-and-input-event- рдХреЗ рд▓рд┐рдП-рдПрдХ-рдЗрдирдкреБрдЯ-рддрддреНрд╡)
рд╣рд╛рдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИ onChange рд╕реЗ input
рдШрдЯрдирд╛: https://stackoverflow.com/questions/38256332/in-react-whats-the-difference-between-onchange-and-oninput
рдЗрд╕рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛рдУрдВ (рд╕рд╛рде рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдЗрдирдкреБрдЯ рдЗрдирдкреБрдЯ) рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ Input
рдШрдЯрдХ рдореЗрдВ рднреА рдХрд╣рддрд╛ рд╣реВрдВред рдЕрдм рдпрд╣ iOS рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ!
componentDidMount() {
this.inputRef.addEventListener('change', this.onChange);
}
onChange = (event) => {
// React actually uses the input even for onChange, this causes autofill to
// break in iOS Chrome as it only fires a change event.
if (this.props.onChange) {
this.props.onChange(event);
}
}
componentWillUnount() {
this.inputRef.removeEventListener('change', this.onChange);
}
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: Chrome рдХреЛ v65 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЛрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: /
рдбреЛрдорд┐рдирд┐рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рдордиреЗ рджрд┐рд╕рдВрдмрд░ рдореЗрдВ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ред рдЕрдм рд╣рдо рдХреАрдбрд╛рдЙрди, рдЪреЗрдВрдЬ, рдЗрдирдкреБрдЯ рдФрд░ рдХреАрдЕрдк рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рдлрд╛рдпрд░ рдХрд░рддреЗ рд╣реИрдВред
https://chromium-review.googlesource.com/c/chromium/src/+/771674рд╣рдордиреЗ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рднреА рдареАрдХ рдХрд┐рдпрд╛ рдерд╛ред
https://chromium-review.googlesource.com/c/chromium/src/+/844324рдЬрдмрдХрд┐ рдпрд╣ рдСрдЯреЛрдлрд┐рд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдСрдирдХреЙрдиреНрдЧ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдПрдХ рдореБрджреНрджрд╛ рднреА рдЙрдард╛рдпрд╛ рдФрд░ рджреЗрд╡ рдХреЛ рдпрдХреАрди рдерд╛ рдХрд┐ рдпрд╣ 65 рдореЗрдВ рддрдп рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ ... https://bugs.chromium.org/p/chromium/issues/detail?id=813175
рдореИрдВ рдиреЗрдЯрд┐рд╡ change
рдЗрд╡реЗрдВрдЯ рдХреЛ рднреА рд╕реБрди рд░рд╣рд╛ рд╣реВрдВ, рдЬреИрд╕реЗ @DominicTobias рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП iOS рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЖрд░реЛрд╣ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдиреЗрдЯрд┐рд╡ рдЗрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдореЗрдВ Redux-form рдХреЗ onChange
рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рдореИрдВ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП input:-webkit-autofill
рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
Https://labrewlangerie.com (рд╕рдВрдкрд░реНрдХ рдлрд╝реЙрд░реНрдо) рдХреЗ рдиреАрдЪреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВред
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд┐рдХреНрд╕ рдЖрдЦрд┐рд░рдХрд╛рд░ рдХреНрд░реЛрдо iOS рдореЗрдВ рдЖ рдЧрдпрд╛ рд╣реИ! рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 1 рджрд┐рд╕рдВрдмрд░ рдХреЛ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
https://bugs.chromium.org/p/chromium/issues/detail?id=705275#c11
https://chromium-review.googlesource.com/c/chromium/src/+/771674
https://chromium.googlesource.com/chromium/src/+/55518e17850cac0bdc6fca7b24092bea479e34db
рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╡реАрдирддрдо рдХреНрд░реЛрдо рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ (рдХреЛрдгреАрдп 5) рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдпрд╣рд╛рдБ рдХреНрд░реЛрдо 65, рд░рд┐рдПрдХреНрдЯ 15.6 рдореЗрдВ рд╕рдорд╛рди рд╣реИред
рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ, рдорд╣рдорджреА рдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ 13 рдорд╛рд░реНрдЪ рдХреЛ v65 :(
рдЯрд┐рдкреНрдкрдгреА 15 [email protected] рджреНрд╡рд╛рд░рд╛, 9 рдорд╛рд░реНрдЪ
рдХреНрд░реЛрдо 64 рдореЗрдВ рдареАрдХ рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рдмреБрд░рд╛ред рдХреНрд░реЛрдо 65 рдореЗрдВ (13 рдорд╛рд░реНрдЪ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдЖрдкрдХреА рдореВрд▓ рдШрдЯрдирд╛рдУрдВ рдХреА рдбреЗрдореЛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреНрд░реЛрдо 65 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдкрд░ рдЖрдкрдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред
https://bugs.chromium.org/p/chromium/issues/detail?id=813175
рдЕрдкрдиреЗ рдлреЛрди рдкрд░ рдпрд╣рд╛рдВ рдЬрд╛рдХрд░ рджреЗрдЦреЗрдВ :
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рд╣реИ рдХрд┐ v65 рдореЗрдВ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рднрд▓реЗ рд╣реА рдЗрд╕реЗ рдЗрдирдкреБрдЯ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рдлрд┐рд░ рднреА рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ! рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд░рд╣рд╛ рд╣реИ (рдпрд╛ рдпрджрд┐ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рддрддреНрд╡ рдкрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░)ред
рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВ рдЕрдм рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЗрдирдкреБрдЯ рдШрдЯрдирд╛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ (https://kind-stallman-f3c045.netlify.com/nn.html:
рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд░рд┐рдПрдХреНрдЯ рдЙрди рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ (https://kind-stallman-f3c045.netlify.com):
рдЗрдирдкреБрдЯ рдкрд░ onBlur = {this.handleChange} рдЬреЛрдбрд╝реЗрдВ
KlarnaUI рдХреА рдЯреАрдо рдиреЗ onAnimationStart
рдЗрд╡реЗрдВрдЯ рдФрд░ :-webkit-autofill
pseudo рдХреНрд▓рд╛рд╕ рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдХ рдХрд┐рдпрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ - https://medium.com/@brunn/detecting -autofilled- рдЦреЗрддреЛрдВ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-aed598d25da7
рд╣рдордиреЗ рдЗрд╕ рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдХреЗрд╡рд▓ рдХреНрд░реЛрдо рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рдореИрдВ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╢рд┐рдо рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛред
рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?
рдКрдкрд░, рдЗрд╕ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЪрд╛рд▓ рдХреНрдпрд╛ рд╣реИ?
@ericflo @sophiebits
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдмрдиреА рд╣реБрдИ рд╣реИ, рдХреЛрдИ рднреА рдЕрдкрдбреЗрдЯ?
@Pixelatex @Aarbel рдореЗрд░рд╛ рдЬрд╡рд╛рдм рдереЛрдбрд╝рд╛ рдФрд░ рдКрдкрд░ рджреЗрдЦреЗрдВ - https://github.com/facebook/react/issues/1159#issuecomment -371604044
рдореВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ input
рдШрдЯрдирд╛ рдирд╣реАрдВ change
onChange рдХреЗ рд▓рд┐рдП рд╕реБрдирддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рджреЛрдиреЛрдВ рдХреЛ рд╕реБрдирддрд╛ рд╣реИред
@DominicTobias рдореИрдВрдиреЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкреГрд╖реНрда рдореЗрдВ рдХрд╣реАрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддрдм рддрдХ рдШрдЯрдирд╛ рджрд░реНрдЬ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдЕрдм рд▓рдЧрднрдЧ рдПрдХ рджрд┐рди рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрд╕реНрдХрдЯреЙрдк рдХреНрд░реЛрдо 67 рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 15.6.0 рдореЗрдВ рдХреНрдпрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
onAnimationStart
input:-webkit-autofill
https://medium.com/@brunn/detecting -autofilled-рдлрд╝реАрд▓реНрдб-рдЗрди-рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-aed598d25da7 - рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдЖрдЧ (рдЕрднреА рддрдХ рдлреЙрд░реНрдо рдирд╣реАрдВ рднрд░рд╛ рдЧрдпрд╛ рд╣реИ)this.inputRef.addEventListener("transitionend", this.doSomething, false)
input:-webkit-autofill
css рд╕рдВрдХреНрд░рдордг рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ - рд╕рдордп рдкрд░ рдЖрдЧ рд▓рдЧ рдЬрд╛рддреА рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк рдкреГрд╖реНрда рдХреЛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ, рдЬреИрд╕рд╛ рдХрд┐ @Pixelatex рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИthis.inputRef.addEventListener("change", this.doSomething)
- рдЬрдм рддрдХ рдЖрдк рдкреГрд╖реНрда рдкрд░ рдХреНрд▓рд┐рдХ рдирд╣реАрдВ рдХрд░рддреЗ рддрдм рддрдХ рдЖрдЧ рдирд╣реАрдВ рд▓рдЧрддреАonBlur={this.doSomething}
- рдПрдХ рдШрдЯрдирд╛ рдХреЛ рдЖрдЧ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИрдлрд┐рд░, рдпреЗ рд╕рдорд╛рдзрд╛рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рддрдХ рдЖрдк рдкреГрд╖реНрда рдХреЛ рдкреНрд░реЛрдХ рдирд╣реАрдВ рдХрд░рддреЗ HTML рдореЗрдВ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдирд┐рдХрдЯрддрдо 2 рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ document
рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкреЗрдЬ рдХреЛ рдЬрдЧрд╛рдПрдЧрд╛, рдФрд░ рдЕрдм рддрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
@DominicTobias рдХреНрдпрд╛ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдбреЗрд╕реНрдХрдЯреЙрдк рдХреНрд░реЛрдо рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рджрд░рдЕрд╕рд▓, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЧрдВрджрд╛ рд╣реИрдХ рд╣реИред рдпрджрд┐ рдЖрдк рдкреНрд░рдЪрд▓рд┐рдд рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд╕рдорд╛рдзрд╛рди 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рдпрд╣рд╛рдВ рдЧрдВрджрдЧреА рдЖрддреА рд╣реИ" "рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдПрдХ рд╡реИрдз рдбреЗрдЯрд╛ рд╣реИ"ред рдлрд┐рд░ рдЖрдк рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдШрдЯрдирд╛ рдХреЗ рдмрд╛рдж рд╕рдВрдХреНрд░рдордг рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдмрдорд┐рдЯ рдмрдЯрди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ:
рд╕реАрдПрд╕рдПрд╕:
input:-webkit-autofill {
transition: background-color 0.1s ease-in-out 0s;
}
рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ:
this.autofillCompleted = this.autofillCompleted.bind(this)
рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░:
componentDidMount(){
if(this.myInputRef)
this.myInputRef.addEventListener("transitionend", this.autofillCompleted, false)
}
autofillCompleted(){
this.setState({ submitActive: true });
}
componentWillUnmount(){
if(this.myInputRef)
this.myInputRef.removeEventListener("transitionend", this.autofillCompleted, false)
}
JSX рдХреЗ рдЕрдВрджрд░:
<FormControl
inputRef={(node) => this.myInputRef= node}
/>
рдмреБрдирд┐рдпрд╛рджреА рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреА рдПрд╕ (рдЬреИрд╕реЗ input
), рдХрд╛ рдЙрдкрдпреЛрдЧ ref
рдмрдЬрд╛рдп рд╕рд╣рд╛рд░рд╛ inputRef
рдирд╡реАрдирддрдо рдХреНрд░реЛрдо рдбреЗрд╕реНрдХрдЯреЙрдк рдФрд░ рдЖрдИрдУрдПрд╕ 12 рд╕рдлрд╛рд░реА рдореЗрдВ, <form>
рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рд╕реЗ рдСрдирдХреЙрдиреНрдЧ рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
@ рдЖрд░рдПрдХреНрд╕рдмреА <p> </p>
рдореЗрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реИ ?
@basarat рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░рд╛ рдХреЛрдб <form>
рдЯреИрдЧ
рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?
рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?
рдЕрдЧрд░ рдЕрдкрдбреЗрдЯ рд╣реЛрддреЗ, рддреЛ рд╡реЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╣реЛрддреЗред
рдХреГрдкрдпрд╛ рдкреЛрд╕реНрдЯ рди рдХрд░реЗрдВ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╕рд╛рд░реНрдердХ рдирд╣реАрдВ рд╣реИ - рдЖрдк рд╣рд░ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕реНрдкреИрдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдпрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред
рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдПрдХ рдореБрджреНрджрд╛ рднреА рдЙрдард╛рдпрд╛ рдФрд░ рджреЗрд╡ рдХреЛ рдпрдХреАрди рдерд╛ рдХрд┐ рдпрд╣ 65 рдореЗрдВ рддрдп рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ ... https://bugs.chromium.org/p/chromium/issues/detail?id=813175
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдлрд┐рдХреНрд╕ рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рд┐рдд рдирд╣реАрдВ рдерд╛ред рд╣рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ iOS рдкрд░ рдХреНрд░реЛрдо рдЕрдм рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЧрд▓рддреА рд╕реЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ рдерд╛ред рдпрд╣ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рддрд░рдл рд╕реЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдФрд░ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ (рд╣рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдХреНрд░реЛрдо рдиреЗ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдерд╛)ред
рдпрджрд┐ рдЖрдк рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдХ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЯреАрдо рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рд▓реВрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдмрдЧ рддрдХ рдЙрдмрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рд░рд┐рдПрдХреНрдЯ рдмреАрдУрдЯреАрдПрдЪ change
рдФрд░ input
рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдпрджрд┐ рдСрдЯреЛрдлрд┐рд▓ рдЙрди рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рднреА рдЖрдЧ рд▓рдЧрд╛рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдореВрд▓ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдпрд╛ рдпрд╣рд╛рдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореБрджреНрджреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ?
Btw рд╣рдо рдЗрд╕реЗ # 9657 рдХреЗ рдПрдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рд╕реЗрд╡рд╛ рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
@ рд╣рдо рд╕рд╣реА рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рдирд╣реАрдВ рднреЗрдЬрддреЗ рд╣реИрдВ:
http://react-hydration.surge.sh/hydration
рдареАрдХ рд╣реИ рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рд╢реЛрдз рдХрд┐рдпрд╛ рд╣реИ:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рджреЛ рдореБрджреНрджреЗ рд╣реИрдВ:
рдпрд╣рд╛рдБ рдПрдХ рд╕рд╛рдЗрдЯ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ: https://jquense.github.io/browser-test-pages/autofill/login/
рдореИрдВ рдЬреЛ рдЕрдиреНрдп рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рд╕реЗ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рд╡реЗ рдСрдЯреЛрдлрд┐рд▓реНрдб рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
рдиреЛрдЯ рдКрдкрд░ рдПрдХ gatsby рдкреЗрдЬ рд╣реИ рдЗрд╕рд▓рд┐рдП _also_ SSR рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ
@nhunzaker рдЖрдкрдХреЗ рдкрд╛рд╕ IOS рдХреНрд░реЛрдо рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрддреБрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ? Vue punted https://github.com/vuejs/vue/issues/7058 рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдирд╣реАрдВ рдХрд░рддреА рд╣реИ
рдореИрдВрдиреЗ iOS рдХреЗ рдореБрджреНрджреЗ рдкрд░ Chrome рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ Chrome рдмрдЧ рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИ: https://bugs.chromium.org/p/chromium/issues/detail?id=895898
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП 'рдирд╛рдо' рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ? рдЗрд╕рд╕реЗ рдореЗрд░рд╛ рдХрд╛рдо рдмрдирддрд╛ рд╣реИред onChange рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдЯреЛрдлрд┐рд▓ рдкрд░ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
@eatsjobs рд╣рдо attr рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИред
рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛
$$(':-webkit-autofill')
рдХреНрд░реЛрдо 70 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдСрдЯреЛ-рднрд░рд╛ рдЗрдирдкреБрдЯ рджреЗрддрд╛ рд╣реИред
рдореЗрд░реЗ рд▓рд┐рдП @QuantumInformation рд╡рд╣реА :(
handleOnChange = e => {
this.setState({ email: e.target.value }, () => {
alert(this.state.email)
})
}
<form>
<input
name="email"
type="email"
placeholder="Enter Your Email"
autocomplete="email"
value={this.state.email}
onChange={e => this.handleOnChange(e)}
/>
</form>
рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рдХрд┐ рдХрд╛рдо рдХрд░рдирд╛ рдареАрдХ рд░рд╣рддрд╛ рд╣реИред
рдСрдЯреЛрдлрд┐рд▓ рдиреЗ рдореЗрд░реЗ рд░рд╛рдЬреНрдп рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ред (рдЖрдИрдУрдПрд╕ 12)
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдП рдереЗ, рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдЬреЛрдЦрд┐рдореЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрддреЗ рд╣реА рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рд┐рд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рдкреНрд░рдкрддреНрд░ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ред рд╕рдВрднрд╡рддрдГ рдЗрд╕ рдХрд╛рд░рдг рдХрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ autocomplete="off"
рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рдореНрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реЛрдЪреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдерд╛ред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ <button type="submit" />
рдПрдХ <form>
<button type="submit" />
рдЕрдВрджрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣ рд░рд╣рд╛ рд╣реИ "рдЕрд░реЗ рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЕрднреАрд╖реНрдЯ рд╣реИ, рдЪрд▓реЛ рдЕрдм рдлреЙрд░реНрдо рд╡реИрд▓реНрдпреВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╣реИрдВ"ред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╕рд╛рдЗрдирдЗрдирдлрд╝реЙрд░реНрдо рдХреЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
import React from 'react';
class SignInForm extends React.Component {
constructor() {
this.state = {
email: '',
password: '',
};
this.handleEmail = this.handleEmail.bind(this);
this.handlePassword = this.handlePassword.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleEmail(event) {
this.setState({ email: event.target.value });
}
handlePassword(event) {
this.setState({ password: event.target.value });
}
handleSubmit() {
console.log(this.state.email); // The email value
console.log(this.state.password); // The password value
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<input
name="email"
type="text"
value={this.state.email}
onChange={this.handleEmail}
placeholder="Email"
/>
<input
name="password"
type="text"
value={this.state.password}
onChange={this.handlePassword}
placeholder="Password"
/>
<button type="submit" onClick={this.handleSubmit}>Sign In</button>
</form>
);
}
}
export default SignInForm;
рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдкрд░, рдкреНрд░рдкрддреНрд░ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХреА:
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рд╕рдмрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд┐рд░рджрд░реНрдж рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд░рд┐рдПрдХреНрдЯ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдПрдХ рдлреЙрд░реНрдо рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╕рджрд╛рд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: https://html.spec.whatwg.org/multipage/forms.html
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдП рдереЗ, рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдЬреЛрдЦрд┐рдореЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрддреЗ рд╣реА рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рд┐рд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рдкреНрд░рдкрддреНрд░ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ред рд╕рдВрднрд╡рддрдГ рдЗрд╕ рдХрд╛рд░рдг рдХрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐
autocomplete="off"
рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рдореНрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдЗрд╕ рддрдереНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЬрдм рд╣рдо рдбреЛрдо рдиреЛрдб рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ (рдФрд░ рдХрднреА рдирд╣реАрдВ) рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреА
- рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдП рдЧрдП рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдЧрд▓реЗ рд▓рдЧрд╛рдУ
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реЛрдЪреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдерд╛ред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
<button type="submit" />
рдПрдХ<form>
<button type="submit" />
рдЕрдВрджрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣ рд░рд╣рд╛ рд╣реИ "рдЕрд░реЗ рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЕрднреАрд╖реНрдЯ рд╣реИ, рдЪрд▓реЛ рдЕрдм рдлреЙрд░реНрдо рд╡реИрд▓реНрдпреВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╣реИрдВ"редрдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╕рд╛рдЗрдирдЗрдирдлрд╝реЙрд░реНрдо рдХреЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
import React from 'react'; class SignInForm extends React.Component { constructor() { this.state = { email: '', password: '', }; this.handleEmail = this.handleEmail.bind(this); this.handlePassword = this.handlePassword.bind(this); this.handleSubmit = this.handleSubmit.bind(this); } handleEmail(event) { this.setState({ email: event.target.value }); } handlePassword(event) { this.setState({ password: event.target.value }); } handleSubmit() { console.log(this.state.email); // The email value console.log(this.state.password); // The password value } render() { return ( <form onSubmit={this.handleSubmit}> <input name="email" type="text" value={this.state.email} onChange={this.handleEmail} placeholder="Email" /> <input name="password" type="text" value={this.state.password} onChange={this.handlePassword} placeholder="Password" /> <button type="submit" onClick={this.handleSubmit}>Sign In</button> </form> ); } } export default SignInForm;
рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдкрд░, рдкреНрд░рдкрддреНрд░ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХреА:
- рд╣рдо рд╕рдмрдорд┐рдЯ рдмрдЯрди рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╕рднреА рд╕рддреНрдпрд╛рдкрди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рд╕рдмрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд┐рд░рджрд░реНрдж рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд░рд┐рдПрдХреНрдЯ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдПрдХ рдлреЙрд░реНрдо рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╕рджрд╛рд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: https://html.spec.whatwg.org/multipage/forms.html
рд╕рд╛рд░рд╛рдВрд╢ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреНрд░рдорд┐рдд рд╣реВрдВред рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рд╣рдо рдХреЛрдИ рдлрд╝реЙрд░реНрдо рд╕рдмрдорд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ "рддрджрдиреБрд╕рд╛рд░ рдЕрджреНрдпрддрди" рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЖрдЧ рджреЗрдЧрд╛, рдЬреЛ рдСрдЯреЛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдШрдЯрдирд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рднрд░реЗрдЧреА? рдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЬрдорд╛ рдШрдЯрдирд╛ рдХреЛ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЕрдм рд░рд┐рдлрд▓реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрджрд┐ рдпрд╣ рдкреВрд░реНрд╡ рд╣реИ рддреЛ рд╣рдо рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдмрд╛рдж рдХреА рдмрд╛рдд рд╣реИ рддреЛ рд╣рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд░реЗрдл рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
@thomasjulianstoelen рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рдерд╛?
@dwoodwardgb
рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ (рдХреНрд░реЛрдо рдХреЗ рд╕рд╛рде, рдХрдо рд╕реЗ рдХрдо), рдпрд╣ рдкреГрд╖реНрда (рдХреНрд▓рд┐рдХ, рдлреЙрд░реНрдо рд╕рдмрдорд┐рд╢рди, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╣рд▓реА рдмрд╛рддрдЪреАрдд рдкрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореЙрдбрд▓ рдЪрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдЖрдк рд╕реНрд╡рдд: рдкреВрд░реНрдг = "рдмрдВрдж" рд╡рд┐рд╢реЗрд╖рддрд╛ (HTML5) рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ url рд╣реИрд╢ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдЗрдирдкреБрдЯ рдорд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдЦреЛрджреЗрдВ: рдХреНрд░реЛрдорд┐рдпрдо рдиреЗ рдЗрд╕ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ "рдкрд░рд┐рд╡рд░реНрддрди" рдФрд░ "рдЗрдирдкреБрдЯ" рджреЛрдиреЛрдВ рджреЗрд╢реА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛: https://bugs.chromium.org/p/chromium/issues/detail?id= 813,175ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдЕрднреА рднреА рдЗрди рдореВрд▓ рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ onChange
рдЗрд╡реЗрдВрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡рддрдГ рд░рд┐рдПрдХреНрдЯ рдХреЗ рдбрд┐рдбреБрдкреНрд▓реАрдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ (https://github.com/facebook/react/issues/10135) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдпрд╛ рдпрд╣ рддрдереНрдп рдХрд┐ iOS рдкрд░ рдХреНрд░реЛрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдП рдЧрдП рдИрд╡реЗрдВрдЯ isTrusted=false
рдлреНрд▓реИрдЧ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдХрд╛ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд░рд┐рдПрдХреНрдЯ onChange
рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? @gaearon рдпрд╛ @zpao (рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдиреБрдорд╛рди)?
рдЗрд╕ рдмреАрдЪ, рдореИрдВ onInput
рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рд╕реАрдзреЗ "рдЗрдирдкреБрдЯ" рдЗрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрдирддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд░реЛрдо рдореЗрдВ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬрд┐рд╕рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛:
рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рд╕реЗ simulated
рдзреНрд╡рдЬ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╡рддрдГ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХрдкреВрд░реНрдг рддрд░реНрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред
@nfiacco рдЬреЛ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ, 2018 рд╕реЗ рд╣реИ, рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ 2014 рдореЗрдВ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╕рддрд╣ рдкрд░ рдЬреЛ рдирд╣реАрдВ
рдореИрдВ 2022 рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП 'рдирд╛рдо' рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ? рдЗрд╕рд╕реЗ рдореЗрд░рд╛ рдХрд╛рдо рдмрдирддрд╛ рд╣реИред onChange рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдЯреЛрдлрд┐рд▓ рдкрд░ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ