วิธีการเลือกข้อความทั้งหมดในการป้อนข้อมูลด้วย Reactjs เมื่อเน้น?


คำตอบ:


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
ใช้งานได้ในฟังก์ชันบริสุทธิ์ (ไม่มีคลาส) ขอบคุณสำหรับโซลูชันนี้
Jan Jarčík

12
สามารถทำให้ง่ายขึ้นได้โดยไม่ต้องใช้ฟังก์ชันพิเศษในกรณีที่เป็นเพียงฟิลด์เดียวในคลาส:<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
Rahul Desai

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()}}
      />
    )
  }
});

คุณต้องตั้งค่าอ้างอิงบนอินพุตและเมื่อโฟกัสคุณต้องใช้ select ()


5

ขอบคุณฉันซาบซึ้ง ฉันทำเช่นนั้น:

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

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}
/>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.