Bagaimana cara memilih semua teks yang di input dengan Reactjs, ketika sudah difokuskan?

92

Misalnya: codepen

var InputBox = React.createClass({
  render: function() {
    return (
      <input className="mainInput" value='Some something'></input>
    )
  }
});
Alexander Shtang
sumber

Jawaban:

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} />
      );
    },
})
dschu
sumber
1
ini bekerja dalam fungsi murni (tanpa kelas), terima kasih untuk solusi ini.
Jan Jarčík
11
Dapat disederhanakan lebih lanjut tanpa memerlukan fungsi tambahan jika hanya untuk satu bidang di kelas:<input type='text' value='Some something' onFocus={e => e.target.select()} />
TK123
4
@ TK123 Anda harus menghindari fungsi panah dalam metode render Anda . Ini juga melanggar jsx-no-bind yang digunakan oleh eslint-config-airbnb misalnya.
dschu
1
Bagaimana cara membuatnya berfungsi untuk disabledkotak teks? jsfiddle.net/69z2wepo/317733
Rahul Desai
3
@RahulDesai Alih-alih disabled, gunakan 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()}}
      />
    )
  }
});

Anda harus mengatur ref pada input dan ketika fokus Anda harus menggunakan select ().

obreja catalin
sumber
5

Terima kasih, saya menghargainya. Saya melakukannya begitu:

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

Dalam kasus saya, saya ingin memilih teks dari awal setelah input muncul di modal:

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

<input ref='copy'
Lukas Lukac
sumber
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;

Pilih otomatis semua konten dalam input untuk kelas reaksi. Atribut onFocus pada tag input akan memanggil sebuah fungsi. Fungsi OnFocus memiliki parameter yang disebut event yang dihasilkan secara otomatis. Seperti acara di atas event.target.select () akan mengatur semua konten dari tag input.

Kylo Jorgensen
sumber
0

Komponen Fungsional Cara Lain dengan 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}
/>
Igor Pavlenko
sumber