输入组件的 React 游标跳转以在某些删除时开始
React Cursor for Input Component Jumps to Start on Certain Deletes
我创建了一个建立在输入元素之上的 React 组件。我在这里提供了一个沙箱:https://codesandbox.io/s/green-monad-tgn45?file=/src/input.jsx。一切正常,除了当我尝试删除带有 space 的内容时仍然遇到问题。例如,输入“this is some text”然后删除任何这些词会使我的光标跳到输入字段的开头。删除字符工作正常,但由于某种原因,当我删除一个前面字符是 space 的字符时,它会跳到开头。奇怪的是,如果我输入“test”或其他一些结尾带有一堆 space 的词,我没有任何问题。但是,一旦我有一个以 space 开头的单词,例如“test one”,删除第二个单词会使我的光标跳到开头。
我见过其他人遇到游标跳到末尾的问题,但从来没有看到游标以这种方式跳到开头。我处理 onChange 事件的方式有问题吗?
这是我的组件(沙盒中也提供了代码):
class Input extends Component {
state = {
inputValue: ""
};
handleChange = event => {
console.log(event.target.value);
this.setState({ inputValue: event.target.value });
if (this.props.onChange) this.props.onChange(this.state.inputValue);
};
render() {
const { type, maxLength, placeholder } = this.props;
return (
<input
type={type}
value={this.state.inputValue}
name="input-form"
onChange={this.handleChange}
maxLength={maxLength}
placeholder={placeholder}
/>
);
}
}
我认为您的代码没有任何问题。就是这样,
<Input type="email" maxLength="100" placeholder="test" />
对于输入类型的电子邮件,浏览器可能会尝试检查和格式化。因为您不能在电子邮件中添加尾随 space,对吧。
尝试将 type
更改为 text
,问题消失了!!,
<Input type="text" maxLength="100" placeholder="test" />
我创建了一个建立在输入元素之上的 React 组件。我在这里提供了一个沙箱:https://codesandbox.io/s/green-monad-tgn45?file=/src/input.jsx。一切正常,除了当我尝试删除带有 space 的内容时仍然遇到问题。例如,输入“this is some text”然后删除任何这些词会使我的光标跳到输入字段的开头。删除字符工作正常,但由于某种原因,当我删除一个前面字符是 space 的字符时,它会跳到开头。奇怪的是,如果我输入“test”或其他一些结尾带有一堆 space 的词,我没有任何问题。但是,一旦我有一个以 space 开头的单词,例如“test one”,删除第二个单词会使我的光标跳到开头。
我见过其他人遇到游标跳到末尾的问题,但从来没有看到游标以这种方式跳到开头。我处理 onChange 事件的方式有问题吗?
这是我的组件(沙盒中也提供了代码):
class Input extends Component {
state = {
inputValue: ""
};
handleChange = event => {
console.log(event.target.value);
this.setState({ inputValue: event.target.value });
if (this.props.onChange) this.props.onChange(this.state.inputValue);
};
render() {
const { type, maxLength, placeholder } = this.props;
return (
<input
type={type}
value={this.state.inputValue}
name="input-form"
onChange={this.handleChange}
maxLength={maxLength}
placeholder={placeholder}
/>
);
}
}
我认为您的代码没有任何问题。就是这样,
<Input type="email" maxLength="100" placeholder="test" />
对于输入类型的电子邮件,浏览器可能会尝试检查和格式化。因为您不能在电子邮件中添加尾随 space,对吧。
尝试将 type
更改为 text
,问题消失了!!,
<Input type="text" maxLength="100" placeholder="test" />