为了账号安全,请及时绑定邮箱和手机立即绑定

可换行的单行文本输入

可换行的单行文本输入

慕森卡 2022-06-05 15:50:06
我正在为我的一个项目编写一个基于浏览器的文本编辑器。每个文本都有一个标题,用户可以对其进行编辑。用户不应该能够格式化该标题或向其添加任何 html,它应该只是一个纯字符串。一个<input type="text">元素是理想的,但由于标题可能很长,我需要换行,据我所知,这是输入标签无法做到的。我可以使用<textarea>,但这将允许用户手动添加换行符,这是我不想要的。我可以使用<p contenteditable="true">,但这会添加不需要的标记,并且用户将能够插入手动换行符和其他标记。我可以编写一大堆 JavaScript 来验证和限制<textarea>orcontenteditable标记,但这似乎很容易出错并且可能会引入跨浏览器的不一致。还是我让这种方式过于复杂,并且有一种简单的方法可以防止误用?我相信人们以前已经解决了这个问题。我在这里想念什么?我真的需要一个非常复杂的 JavaScript 解决方案来获得可换行的单行文本输入吗?顺便说一句,我使用tiptap作为我的编辑器组件。我知道它可以进行标题输入,但到目前为止我还没有弄清楚如何提取该标题。我希望它与文本分开存储,而不是作为文本的一部分。如果有人对使用tiptap 解决我的问题有意见,那也可以作为答案——尽管我认为使用成熟的富文本编辑器来制作简单的、未格式化的单行代码有点过头了。我更喜欢更轻量级的解决方案。
查看完整描述

1 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

这里有两个简单的解决方案:


在客户端禁用 Enter 键


document.querySelector('#textInput').addEventListener('keydown',

    function(event) {

        var keyCode = event.keyCode || event.which;

        // If ENTER key

        if (keyCode === 13) {

            event.preventDefault(); // do nothing

        }

    }

);

<html>

<body>

  <textarea id="textInput" rows=3></textarea>

</body>

</html>


删除服务器端的换行符


let text = inputText.replace(/\n/, '');


或者用空格替换它们,然后用一个替换双空格


let text = inputText.replace(/(\r\n|\n|\r)/gm, ' ').replace(/\s+/g, ' ');



使用这两种解决方案比只使用一种解决方案要好。


查看完整回答
反对 回复 2022-06-05
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信