Як виділити весь текст при введенні за допомогою Reactjs, коли він сфокусований?


Відповіді:


187

Functional component:

const handleFocus = (event) => event.target.select();
const Input = (props) => <input type="text" value="Some something" onFocus={handleFocus} />

ES6 class component:

class Input extends React.Component {
    handleFocus = (event) => event.target.select();

    render() {
        return (
            <input type="text" value="Some something" onFocus={this.handleFocus} />
        );
    }
}

React.createClass:

React.createClass({
    handleFocus: function(event) {
      event.target.select();
    },

    render: function() {
      return (
        <input type="text" value="Some something" onFocus={this.handleFocus} />
      );
    },
})

1
це працює в чистій функції (без класу), thx для цього рішення.
Ян Ярчик

11
Може бути спрощений додатково без потреби в додатковій функції, якщо це лише для одного поля в класі:<input type='text' value='Some something' onFocus={e => e.target.select()} />
TK123,

4
@ TK123 Вам слід уникати функцій стрілок у ваших методах візуалізації . Він також порушує jsx-no-bind, який використовується, наприклад, eslint-config-airbnb .
dschu

1
Як зробити так, щоб це працювало для disabledтекстового поля? jsfiddle.net/69z2wepo/317733
Рахул Десай,

3
@RahulDesai Замість disabled, використовуйте readOnly: jsfiddle.net/kxgsv678
dschu

5
var InputBox = React.createClass({
  getInitialState(){
    return {
      text: ''
    };
  },
  render: function () {
    return (
      <input
        ref="input"
        className="mainInput"
        placeholder='Text'
        value={this.state.text}
        onChange={(e)=>{this.setState({text:e.target.value});}}
        onFocus={()=>{this.refs.input.select()}}
      />
    )
  }
});

Вам потрібно встановити ref на вході, а коли сфокусовано, вам слід вибрати select ().



1

У моєму випадку я хотів виділити текст з самого початку після того, як вхід з’явився в модалі:

componentDidMount: function() {
    this.refs.copy.select();
},

<input ref='copy'

0
var React = require('react');

var Select = React.createClass({
    handleFocus: function(event) {
        event.target.select()
    },
    render: function() {
        <input type="text" onFocus={this.handleFocus} value={'all of this stuff'} />
    }
});

module.exports = Select;

Автоматичний вибір усього вмісту вводу для класу реакції. Атрибут onFocus на вхідному тегу буде викликати функцію. Функція OnFocus має параметр, який називається подією, що генерується автоматично. Як показано вище, event.target.select () встановить весь вміст вхідного тегу.


0

Ще один функціональний компонент із useRefHook:

const inputEl = useRef(null);

function handleFocus() {
  inputEl.current.select();
}

<input
  type="number"
  value={quantity}
  ref={inputEl}
  onChange={e => setQuantityHandler(e.target.value)}
  onFocus={handleFocus}
/>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.