有两种方法可以做到这一点:在输入时检查每个字符,如果您不希望它显示,则返回 false,或者在每次更改/键入时您可以检查整个内容。虽然前者的性能更高,但在用户粘贴包含不需要的字符的内容的情况下它不起作用。因此,我建议使用后一种方法,如下所示(这将禁止所有垂直空白):
使用 jQuery:
$('textarea').on('keyup', function(){
$(this).val($(this).val().replace(/[\r\n\v]+/g, ''));
});
或者使用纯 JavaScript (ES2015/ES6):
constrainInput = (event) => {
event.target.value = event.target.value.replace(/[\r\n\v]+/g, '')
}
document.querySelectorAll('textarea').forEach(el => {
el.addEventListener('keyup', constrainInput)
})
另一种方法是等到焦点离开文本区域,然后应用转换。这可以避免使用合成的、有条件的活动键盘控件的操作系统上的卡顿行为。不过,用户在离开该字段之前都会看到换行符,因此请注意。为此,只需更改上面的事件监听器来监听blur
而不是keyup
.
如果您使用 React,那么您已经制作了它,因为它避免了移动浏览器的问题,同时让您可以使用受控组件在值更改时对其进行管理:
class TextArea extends React.PureComponent {
state = {
value: ""
};
handleChange = event => {
const value = event.target.value.replace(/[\r\n\v]+/g, "");
this.setState({ value });
};
render() {
return <textarea onChange={this.handleChange} value={this.state.value} />;
}
}