React: рдирд┐рдпрдВрддреНрд░рд┐рдд рдШрдЯрдХреЛрдВ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░-рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рд░реВрдк рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдлрд╝рд░ре░ 2014  ┬╖  80рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/react

рдЬрдм рдкреНрд░рдкрддреНрд░ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рдШрдЯрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо / рдкрд╛рд╕рд╡рд░реНрдб рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдЖрдо) рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрднреА-рдХрднреА рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдХреЛ рд░реЗрдВрдбрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рди рдкрд░ рдСрдирдХреЙрдиреНрдЧ рдЗрд╡реЗрдВрдЯреНрд╕ рдлрд╛рдпрд░рд┐рдВрдЧ рди рд╣реЛред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдкрддреНрд░ рд╕рдмрдорд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдШрдЯрдХ рд╕реНрдерд┐рддрд┐ рдпрд╣ рдирд╣реАрдВ рджрд░реНрд╢рд╛рддреА рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрдпрд╛ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдкрд░, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд▓реЛрдб рдкрд░ рд╣реИ (рдпрд╣ log.refs.myinput.getDOMNode () рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореВрд▓реНрдп

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП 'рдирд╛рдо' рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ? рдЗрд╕рд╕реЗ рдореЗрд░рд╛ рдХрд╛рдо рдмрдирддрд╛ рд╣реИред onChange рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдЯреЛрдлрд┐рд▓ рдкрд░ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рд╕рднреА 80 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рдЗрд╕ рдкрд░ рдХреБрдЫ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ: 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 рдХреНрд░реЛрдо рдореЗрдВ рддреАрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде

screen shot 2018-03-08 at 19 29 15

(рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдкрдиреЗ рдлрд╝реЛрди рдкрд░ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ)

@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

https://storage.googleapis.com/chromium-find-releases-static/555.html#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:

native

рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд░рд┐рдПрдХреНрдЯ рдЙрди рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ (https://kind-stallman-f3c045.netlify.com):

react

рдЗрдирдкреБрдЯ рдкрд░ 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 рдореЗрдВ рдХреНрдпрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

  1. onAnimationStart input:-webkit-autofill https://medium.com/@brunn/detecting -autofilled-рдлрд╝реАрд▓реНрдб-рдЗрди-рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-aed598d25da7 - рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдЖрдЧ (рдЕрднреА рддрдХ рдлреЙрд░реНрдо рдирд╣реАрдВ рднрд░рд╛ рдЧрдпрд╛ рд╣реИ)
  2. this.inputRef.addEventListener("transitionend", this.doSomething, false) input:-webkit-autofill css рд╕рдВрдХреНрд░рдордг рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ - рд╕рдордп рдкрд░ рдЖрдЧ рд▓рдЧ рдЬрд╛рддреА рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк рдкреГрд╖реНрда рдХреЛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ, рдЬреИрд╕рд╛ рдХрд┐ @Pixelatex рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ
  3. this.inputRef.addEventListener("change", this.doSomething) - рдЬрдм рддрдХ рдЖрдк рдкреГрд╖реНрда рдкрд░ рдХреНрд▓рд┐рдХ рдирд╣реАрдВ рдХрд░рддреЗ рддрдм рддрдХ рдЖрдЧ рдирд╣реАрдВ рд▓рдЧрддреА
  4. 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 рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдпрджрд┐ рдСрдЯреЛрдлрд┐рд▓ рдЙрди рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рднреА рдЖрдЧ рд▓рдЧрд╛рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдореВрд▓ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдпрд╛ рдпрд╣рд╛рдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореБрджреНрджреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

  • рдорд╛рди рд╕реНрд╡рдд: рдкреВрд░реНрд╡ "рд░реЗрдВрдбрд░" рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ SSR рдкреГрд╖реНрда рдерд╛ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣рд╛рдЗрдбреНрд░реЗрдЯрд┐рдВрдЧ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╣реА рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (cc @nhunzaker)
  • рдЗрдирдкреБрдЯреНрд╕ рдСрдЯреЛрдлрд┐рд▓ рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдлрд╛рдпрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
  • рдЗрдирдкреБрдЯреНрд╕ рдЕрд▓рдЧ рдШрдЯрдирд╛ рдХреА рдлрд┐рд░ рд╕реЗ рдЖрдЧ рд▓рдЧрд╛рддрд╛ рд╣реИ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрди рд░рд╣рд╛ рд╣реИ (рдпрд╣ v15 рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)

рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ?

Btw рд╣рдо рдЗрд╕реЗ # 9657 рдХреЗ рдПрдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рд╕реЗрд╡рд╛ рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рд╣рдо рд╕рд╣реА рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рдирд╣реАрдВ рднреЗрдЬрддреЗ рд╣реИрдВ:

http://react-hydration.surge.sh/hydration

  1. "рдСрдЯреЛ-рд╣рд╛рдЗрдбреНрд░реЗрдЯ" рдХреЛ рдЕрдирдЪреЗрдХ рдХрд░реЗрдВ
  2. рдорд╛рди рдмрджрд▓реЗрдВ
  3. рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  4. рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ :(

рдареАрдХ рд╣реИ рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рд╢реЛрдз рдХрд┐рдпрд╛ рд╣реИ:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рджреЛ рдореБрджреНрджреЗ рд╣реИрдВ:

  • рд░рд┐рдПрдХреНрдЯ рд╣рд╛рдЗрдбреНрд░реЗрдЯреНрд╕ рдЦреЛ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рднрд░реЗ рдЧрдП рдорд╛рдиред
  • IOS рдкрд░ рдХреНрд░реЛрдо рдСрдЯреЛрдлрд┐рд▓ рдкрд░ рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдХреЛ рдЖрдЧ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ

рдпрд╣рд╛рдБ рдПрдХ рд╕рд╛рдЗрдЯ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ: 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" рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рдореНрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. рдЗрд╕ рддрдереНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЬрдм рд╣рдо рдбреЛрдо рдиреЛрдб рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ (рдФрд░ рдХрднреА рдирд╣реАрдВ) рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреА
  2. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдП рдЧрдП рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдЧрд▓реЗ рд▓рдЧрд╛рдУ

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реЛрдЪреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдерд╛ред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ <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;

рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдкрд░, рдкреНрд░рдкрддреНрд░ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдЧрд╛ред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХреА:

  1. рд╣рдо рд╕рдмрдорд┐рдЯ рдмрдЯрди рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
  2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╕рднреА рд╕рддреНрдпрд╛рдкрди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рд╕рдмрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд┐рд░рджрд░реНрдж рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд░рд┐рдПрдХреНрдЯ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдПрдХ рдлреЙрд░реНрдо рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╕рджрд╛рд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: https://html.spec.whatwg.org/multipage/forms.html

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдП рдереЗ, рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдЬреЛрдЦрд┐рдореЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред

рдпрджрд┐ рд╣рдо рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрддреЗ рд╣реА рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рд┐рд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рдкреНрд░рдкрддреНрд░ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ред рд╕рдВрднрд╡рддрдГ рдЗрд╕ рдХрд╛рд░рдг рдХрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ autocomplete="off" рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рдореНрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. рдЗрд╕ рддрдереНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЬрдм рд╣рдо рдбреЛрдо рдиреЛрдб рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ (рдФрд░ рдХрднреА рдирд╣реАрдВ) рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреА
  2. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдП рдЧрдП рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдЧрд▓реЗ рд▓рдЧрд╛рдУ

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реЛрдЪреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдерд╛ред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ <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;

рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдкрд░, рдкреНрд░рдкрддреНрд░ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдЧрд╛ред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХреА:

  1. рд╣рдо рд╕рдмрдорд┐рдЯ рдмрдЯрди рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
  2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╕рднреА рд╕рддреНрдпрд╛рдкрди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рд╕рдмрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд┐рд░рджрд░реНрдж рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд░рд┐рдПрдХреНрдЯ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдПрдХ рдлреЙрд░реНрдо рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╕рджрд╛рд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: 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 рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рд╕реАрдзреЗ "рдЗрдирдкреБрдЯ" рдЗрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрдирддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд░реЛрдо рдореЗрдВ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬрд┐рд╕рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛:

https://chromium.googlesource.com/chromium/src/+/49bf3cbf7cc6d70643197a604090f8729f9d7404%5E%21/components/autofill/ios/fill/resources/fill.js

рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рд╕реЗ simulated рдзреНрд╡рдЬ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╡рддрдГ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХрдкреВрд░реНрдг рддрд░реНрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

@nfiacco рдЬреЛ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ, 2018 рд╕реЗ рд╣реИ, рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ 2014 рдореЗрдВ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╕рддрд╣ рдкрд░ рдЬреЛ рдирд╣реАрдВ

рдореИрдВ 2022 рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jvorcak picture jvorcak  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MoOx picture MoOx  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zpao picture zpao  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bloodyowl picture bloodyowl  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

varghesep picture varghesep  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ