按下 ENTER 时禁用 Textarea 中的新行

Posted

技术标签:

【中文标题】按下 ENTER 时禁用 Textarea 中的新行【英文标题】:Disable New Line in Textarea when Pressed ENTER 【发布时间】:2013-09-17 17:29:10 【问题描述】:

每当有人在textarea 中按 enter 时,我都会调用一个函数。现在我想在按下 enter 时禁用 new linebreak

所以new line 应该在按下 shift+enter 时工作。在这种情况下,函数不应被调用。

这里是 jsfiddle 演示: http://jsfiddle.net/bxAe2/14/

【问题讨论】:

【参考方案1】:

试试这个

$("textarea").keydown(function(e)
// Enter was pressed without shift key
if (e.keyCode == 13 && !e.shiftKey)

    // prevent default behavior
    e.preventDefault();

);

将您的小提琴更新为

$(".Post_Description_Text").keydown(function(e)
if (e.keyCode == 13 && !e.shiftKey)

  // prevent default behavior
  e.preventDefault();
  //alert("ok");
  return false;
  
);

【讨论】:

这回答了这个问题。请记住,还有其他方法可以在文本区域中获得换行符,例如粘贴或拖放。在这种情况下,您可能还想处理更改事件,并替换 \r\n 而不是阻止该事件。 我可以确认.preventDefault() 也可以在纯 javascript 中工作。 @TalKohavy Jquery 是一个 Javascript 库,不是吗?正如上面的 cmets 所述,.preventDefault() 也可以在纯 JavaScript 中工作另外,如果你看看他的 jsfiddle,它是用 Jquery 编写的。【参考方案2】:

下面的代码是为了防止调整“textarea”的大小,避免textarea内出现滚动条,同时防止按下回车键进入下一行。

style.css

textarea height:200px; width:200px;overflow:hidden;resize: none;

index.html

<textarea></textarea>

Script.js

$("textarea").keydown(function(e)
    // Enter pressed
    if (e.keyCode == 13)
    
        //method to prevent from default behaviour
        e.preventDefault();
    
);

【讨论】:

是的,这对我有用,但它也表明我不推荐使用 keyCode 是否有任何替代方法 if (e.key == "Enter") //你的代码 【参考方案3】:

React:带有值和 onChange 事件的文本区域

const PreventTextAreaEnter = () => 
   const [comment, setComment] = useState();

   const handleTextArea = (e) => 
      console.log(e) // Destructure to get a more accurate log 

      // Return if user presses the enter key
      if(e.nativeEvent.inputType === "insertLineBreak") return;

      setComment(e.target.value);
   ;

   return (
    <>
      <textarea value=comment onChange= (e) =>  handleTextArea(e)  />
    </>
   )
  

【讨论】:

谢谢!那 if 语句究竟是我所缺少的。为我解决了。【参考方案4】:
    $(".Post_Description_Text").keypress(function(event) 

      if (event.which == 13)         

        alert("Function is Called on Enter");

          event.preventDefault(); //Add this line to your code

       

   );

【讨论】:

【参考方案5】:

对于 Angular 用户

虽然有现有的可行解决方案,但如果有人使用 Angular 遇到此问题,您可以使用以下方法禁用新行:

添加&lt;textarea ng-trim="false" ng-model='your.model' ...

在您的控制器中,添加:

$scope.$watch('your.model', function(newvalue, oldvalue) 
    if (newvalue && newvalue.indexOf('\n') > -1) 
       $scope.your.model = oldvalue;
    
);

【讨论】:

这会将光标移到文本的末尾【参考方案6】:

在您的 HTML 中使用 input 标记而不是 textArea 标记

【讨论】:

输入不能换行。 CSS 解决方案是非标准的。唯一的方法是使用文本区域进行长输入。

以上是关于按下 ENTER 时禁用 Textarea 中的新行的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 Blazor <InputText> 时禁用 ENTER 键按下提交按钮

按下回车键时在 Textarea 中启用换行或换行

如何禁用我的 textarea 上的 ENTER 键?

Ctrl+Enter jQuery 在 TEXTAREA

按下回车键时禁用表单提交,因为我使用的是 Ajax 功能

Textarea 忽略输入但需要触发保存按钮