Comment sélectionner tout le texte en entrée avec Reactjs, quand il s'est concentré?


Réponses:


188

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
cela fonctionne en fonction pure (pas de classe), merci pour cette solution.
Jan Jarčík

11
Peut être simplifié davantage sans avoir besoin de la fonction supplémentaire dans le cas où ce n'est que pour un champ de la classe:<input type='text' value='Some something' onFocus={e => e.target.select()} />
TK123

4
@ TK123 Vous devez éviter les fonctions fléchées dans vos méthodes de rendu . Il viole également jsx-no-bind qui est utilisé par eslint-config-airbnb par exemple.
dschu

1
Comment faire fonctionner cela pour une disabledzone de texte? jsfiddle.net/69z2wepo/317733
Rahul Desai

3
@RahulDesai Au lieu de disabled, utilisez 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()}}
      />
    )
  }
});

Vous devez définir ref sur l'entrée et lorsque vous vous concentrez, vous devez utiliser select ().


5

Merci, je l'apprécie. Je l'ai fait ainsi:

var input = self.refs.value.getDOMNode();
            input.focus();
            input.setSelectionRange(0, input.value.length);

1

Dans mon cas, je voulais sélectionner le texte depuis le début après l'apparition de l'entrée dans le modal:

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;

Sélection automatique de tout le contenu d'une entrée pour une classe de réaction. L'attribut onFocus sur une balise d'entrée appellera une fonction. La fonction OnFocus a un paramètre appelé événement généré automatiquement. Comme indiqué ci-dessus, event.target.select () définira tout le contenu d'une balise d'entrée.


0

Un autre composant fonctionnel avec 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}
/>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.