Javascript Don';不允许在文本区域中使用新行
使用jQuery我怎么能不允许在半伪代码中插入新行(通过按enter键或在文本中复制)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
$('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} />;
}
}