Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Don';不允许在文本区域中使用新行_Javascript_Jquery_Formatting - Fatal编程技术网

Javascript Don';不允许在文本区域中使用新行

Javascript Don';不允许在文本区域中使用新行,javascript,jquery,formatting,Javascript,Jquery,Formatting,使用jQuery我怎么能不允许在半伪代码中插入新行(通过按enter键或在文本中复制) $('textarea').keydown(function(){ $(this).remove_new_lines(); }); 谢谢 编辑: 它会像下面那样粗糙还是有更好的方法 function removeNL(s){ return s.replace(/[\n\r\t]/g,); } $('textarea').keydown(function(){ $(this).val(remov

使用jQuery我怎么能不允许在半伪代码中插入新行(通过按enter键或在文本中复制)

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

您可以检查keyCode,如果它等于13,只需返回false即可

$('#TEXTAREA').keypress(function(e){ if (e.keyCode == 13) return false }) $('#TEXTAREA')。按键(功能(e){ 如果(e.keyCode==13)返回false })
有两种方法可以做到这一点:在输入时检查每个字符,如果不希望它显示,则返回false;或者在每次更改/键入时,可以检查整个内容。虽然前者性能更好,但在用户粘贴包含不需要的字符的内容的情况下,它不起作用。出于这个原因,我推荐后一种方法,类似这样的方法(不允许所有垂直空格):

使用jQuery:

$('textarea').on('keyup', function(){
  $(this).val($(this).val().replace(/[\r\n\v]+/g, ''));
});
或者使用普通JavaScript(ES2015/ES6):

另一种方法是等待焦点离开textarea,然后应用转换。这避免了在使用合成的、有条件地激活键盘控件的操作系统上出现janky行为。但是,用户将看到换行符,直到它们离开该字段,因此请注意。为此,只需将上述事件侦听器更改为侦听
blur
,而不是
keyup

如果您使用的是React,那么您可以使用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} />;
  }
}
class TextArea扩展React.PureComponent{
状态={
值:“”
};
handleChange=事件=>{
const value=event.target.value.replace(/[\r\n\v]+/g,”);
this.setState({value});
};
render(){
返回;
}
}

当用户键入或使用以下所有解决方案将内容设置为文本区域时,我仍然可以打开Chrome developer工具并手动编辑字段内容。或禁用javascript:)@Rob,这就是服务器端验证的目的。;)@科雷沃德同意了,这正是我想巧妙地指出的。然而,在大多数情况下,我发现语义形式验证是完全不必要的。很难真正验证提交的内容是否合法。只需验证一些MaxLength并使用它。是的-显然它也在服务器端进行验证,只是在UX前端也需要进行验证。什么是gsub?它说这不是一个公认的功能Ruby方法…哈哈哈。哎呀。替换为
replace()
,这是JavaScript的等价物。关于如何仅用一行替换各种新行,有什么想法吗?我尝试了这种方法,但不起作用:$('text').val($('text').val().replace(/\v+/g,“\n”);也许我没有很好地解释自己。至少允许有2行新行(因为段落分隔)。我在上面粘贴的正则表达式最多允许一个:scorect code
$('textarea').keyup(function(){$(this).val($(this).val().replace(/\r?\n/gi',);})
constrainInput = (event) => { 
  event.target.value = event.target.value.replace(/[\r\n\v]+/g, '')
}

document.querySelectorAll('textarea').forEach(el => {
  el.addEventListener('keyup', constrainInput)
})
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} />;
  }
}