是否可以禁用 textarea 的多行选项?

Posted

技术标签:

【中文标题】是否可以禁用 textarea 的多行选项?【英文标题】:Is it possible to disable textarea's multiline option? 【发布时间】:2012-05-30 17:44:42 【问题描述】:

当然,我可以使用标准的html文本框,但出于某种原因我需要文本区域。

那么,

【问题讨论】:

***.com/questions/5424001/… 【参考方案1】:

您可以使用colsrows 属性设置文本区域的大小,并使其在CSS 中不可调整大小,但您不能阻止用户添加多于一行。即使区域太小,也会出现一个滚动条,让他们想写多少行就写多少行。

如果你真的只需要一行,我建议将 rows 属性设置为 1 并使用 javascript 检查输入是否只有一行。

在html中:

<textarea name="a"  cols="5" rows="1" ></textarea>

在 CSS 中:

textarea
    resize: none; 
    #You can use resize: horizontal if you just want to disable vertical resize

不过,我还是建议使用 &lt;input type="text" ... /&gt; 为什么要避免使用它?

【讨论】:

这可能不是 OP 的用例,但我在构建基本的丰富单行输入时遇到了这个问题(允许在文本框中设置某些单词或单词组的样式)。为了实现这一点,我用pointer-events:none; 覆盖了一个样式化的div。为了使其与滚动时的输入保持同步(当用户键入超出边缘时),您需要侦听滚动事件。不幸的是,只有一个 textarea 会触发一个(输入拒绝)。所以在这种情况下,必须避免输入。 @NicolaeSurdu 怎么会这样?您链接到的小提琴似乎完全按照我描述的方式工作。至少在 Chrome 和 Edge 中。 我的错。没有看到您提到用户仍然能够在文本区域中创建新行。我和我认为 OP 也在寻找一种解决方案来防止这种情况发生。 @NicolaeSurdu 的解决方案是type="text" :) @toniedzwiedz 实际上,解决方案是 JS :)【参考方案2】:

您可以通过在&lt;textarea&gt; 上设置rows="1" 将所有文本保留在一行中,就像其他答案所建议的那样,然后将以下 CSS 应用于文本区域:

resize: none;
white-space: nowrap;
overflow-x: scroll;

此 CSS 将防止单行换行,同时仍通过提供滚动条来导航超出可见区域的任何文本,从而使整行保持可见。

【讨论】:

警告:即使拥有white-space: nowrap 将使其在 1 行上显示所有内容(rows="1" 或其他),它仍然需要用户可能在文本框中输入的所有字符,包括未显示的回车符显示。【参考方案3】:

您可以在 textarea 中使用wrap="off" 属性以单行显示。

&lt;textarea wrap="off"&gt;&lt;/textarea&gt;

【讨论】:

【参考方案4】:

是的,可以使用input 事件在用户每次输入内容时删除所有换行符。

<textarea oninput="this.value = this.value.replace(/\n/g,'')"></textarea>

或者以更文明的方式:

html

<textarea id="ta"></textarea>

js

document.getElementById('ta').addEventListener('input', function(e)
    this.value = this.value.replace(/\n/g,'')
);

Demo on JSFiddle

【讨论】:

列表中唯一对我有用的解决方案【参考方案5】:

使用这个纯 JS 代码,它不会允许用户在 textarea 中输入多行

var textArea = document.getElementsByTagName("textarea")[0];//your desired TextArea
textArea.onkeydown = function (e) 
    if (e.keyCode == 13)  e.preventDefault(); 
;

注意:如果用户复制多行文本并将其粘贴到 TextArea 中,此方法将不起作用。

【讨论】:

【参考方案6】:

使用 rows=1 只显示 1 行。你可以从这个link获得更多信息

【讨论】:

testarea 的主要用途是多行数据,如果你想要单行然后使用文本框。【参考方案7】:

您可以将rows 属性设置为1。

不能禁用多行

【讨论】:

【参考方案8】:

下面的 jQuery sn-p 强制 textarea 显示在一行中。

  $(document).ready(function()
    $('textarea').each(function()$(this).attr('rows', 1););
  );

【讨论】:

以上是关于是否可以禁用 textarea 的多行选项?的主要内容,如果未能解决你的问题,请参考以下文章

禁用 HTML 表单中的选项卡

多行 html 文本区域

如果条件满足要求,JS启用禁用按钮

<input> 通过 CSS 支持多行

表单下拉列表多行文本隐藏域

启用/禁用表单提交按钮不起作用