如何阻止在textarea中输入回车?

Posted

技术标签:

【中文标题】如何阻止在textarea中输入回车?【英文标题】:How to block entering carriage return in textarea? 【发布时间】:2011-08-28 12:07:19 【问题描述】:

如何在按键事件期间使用asp.net mvc在文本区域中阻止输入回车、换行、单引号和双引号?

【问题讨论】:

如果你 A) 写完整的句子,并且 B) 表明你已经尝试解决你的问题,你会得到更多的帮助。 google.com/… @Nick ODell - 这不是真的尼克。 A)不是每个人都完全掌握英语,他的问题很容易理解,@Tim 可以编辑。 B) 没有任何问题是微不足道的。 【参考方案1】:

您可以使用 jquery 并订阅 textarea 的 .keypress() 事件:

$('textarea').keypress(function(event) 
    // Check the keyCode and if the user pressed Enter (code = 13) 
    // disable it
    if (event.keyCode == 13) 
        event.preventDefault();
    
);

【讨论】:

FWIW:如果您不想使用keypress 事件,您可以在keydown 事件期间使用.preventDefault() 抑制回车键的效果。当它遇到keyup 事件时,已经输入了回车。 我真的不明白为什么这是最终的解决方案。如果粘贴呢?最终的解决方案是在您提交表单时运行此功能,以便检查一次,而不是每次输入时。这似乎是一种浪费。 @TheMuffinMan 您可以通过侦听多个事件来调整 Darin Dimitrov 的解决方案,如果您反对,则会触发“更改”事件,您可以检查粘贴或拖动其中的文本以查找回车。 您是故意使用 ==,还是如果我使用 ===,它的工作方式是否相同? @Mafii 是的,它始终如一地工作,因为 event.typeevent.which 分别返回一个字符串和一个整数。但最重要的是,当这些属性具有您期望的值时,您希望您的代码按照您在事件处理程序中声明的方式工作。在任何其他情况下,您都可以避免不确定的结果,并且调试更容易。我采用严格的比较而不是松散的比较,多年来也有可能,我可以说我只有优势。【参考方案2】:

为了适应用户在文本区域内拖放其他文本/元素或在其中粘贴文本引起的文本修改,有必要在change 事件也是如此。

此外,我建议使用.on() 方法,从jQuery 1.7 开始可用,并通过事件对象的event.which 属性检测用户按下的回车键,以获得可靠的跨浏览器行为你的应用:

var $textarea = $('#comment');
// events to bind:
$textarea.on('keydown keyup change focus blur', function(e) 
    if (e.type === 'change') 
        // this event is triggered when the text is changed through drag and drop too,
        // or by pasting something inside the textarea;
        // remove carriage returns (\r) and newlines (\n):
        $textarea.val($textarea.val().replace(/\r?\n/g, ''));
    
    if (e.which === 13) 
        // the enter key has been pressed, avoid producing a carriage return from it:
        e.preventDefault();
    
);

【讨论】:

以上是关于如何阻止在textarea中输入回车?的主要内容,如果未能解决你的问题,请参考以下文章

vue使用textare如何正确统计输入字符个数

正确显示textarea中输入的回车和空格

前端可以用js获取textarea中当前光标位置的行数吗?

textarea输入文字限制个数

使用回车键阻止表单提交

关闭弹出模式时如何重置文本区域的大小?