当聚焦时,如何用Reactjs选择输入中的所有文本?

Ale*_*ang 72 javascript select input reactjs

例如:http://codepen.io/Enclave88/pen/YqNpog?edit = 1010

var InputBox = React.createClass({
  render: function() {
    return (
      <input className="mainInput" value='Some something'></input>
    )
  }
});
Run Code Online (Sandbox Code Playgroud)

dsc*_*chu 139

Functional component:

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

ES6 class component:

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

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

React.createClass:

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

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

  • 可以进一步简化,而不需要额外的函数,只要它只用于类中的一个字段:`<input type ='text'value ='some something'onfocus = {e => e.target.select()} />` (9认同)
  • @ TK123 [你应该避免渲染方法中的箭头功能](https://medium.freecodecamp.org/why-arrow-functions-and-bind-in-reacts-render-are-problematic-f1c08b060e36).它也违反了[eslint-使用的[jsx-no-bind](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md).例如,config-airbnb](https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb). (3认同)
  • @RahulDesai 而不是 `disabled`,使用 `readOnly`:https://jsfiddle.net/kxgsv678/ (3认同)

Fac*_*ier 11

让我们根据@dschu 的答案添加最简单的:

...
<input type='text' value='Some something' onFocus={e => e.target.select()} />
...
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。这是最简单的,并且对打字稿友好。 (2认同)

Ale*_*ang 6

谢谢,我很感激。我是这样做的:

var input = self.refs.value.getDOMNode();
            input.focus();
            input.setSelectionRange(0, input.value.length);
Run Code Online (Sandbox Code Playgroud)


Igo*_*nko 6

使用 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}
/>
Run Code Online (Sandbox Code Playgroud)

  • 我不明白你为什么需要裁判?触发 onFocus 事件时,您将拥有事件对象。 (2认同)

小智 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()}}
      />
    )
  }
});
Run Code Online (Sandbox Code Playgroud)

你必须在输入上设置ref,在聚焦时你必须使用select().