不要在textarea中允许换行

时间:2011-02-10 16:04:13

标签: javascript jquery formatting

使用jQuery如何不允许插入新行(通过在文本中输入或复制) - 在半伪代码中...

$('textarea').keydown(function(){
 $(this).remove_new_lines();
});

谢谢!

编辑:

它会像以下那样粗糙还是有更好的方法?

function removeNL(s){ 
  return s.replace(/[\n\r\t]/g,); 
}

$('textarea').keydown(function(){
 $(this).val(removeNL($(this).val));
});

3 个答案:

答案 0 :(得分:20)

有两种方法可以执行此操作:检查输入的每个字符,如果不希望显示,则返回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)
})

另一种方法是等待焦点离开textarea,然后应用转换。这避免了使用合成的,有条件激活的键盘控件在操作系统上的笨拙行为。但是,用户在离开现场之前会看到换行符,所以请注意。要执行此操作,只需更改上述事件侦听器即可收听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} />;
  }
}

答案 1 :(得分:6)

你可以检查keyCode,如果等于13则只返回false

$('#TEXTAREA').keypress(function(e){
   if (e.keyCode == 13) return false
})

答案 2 :(得分:1)

$('textarea').keydown(function(e){
 var s = $('textarea').val();
 while (s.indexOf("\n") > -1)
  s = s.replace("\n","");
 $('textarea').val(s);
});