从 textarea 中删除换行符
Posted
技术标签:
【中文标题】从 textarea 中删除换行符【英文标题】:Remove line break from textarea 【发布时间】:2011-05-24 16:56:09 【问题描述】:我有一个这样的文本区域:
<textarea tabindex="1" maxlength='2000' id="area"></textarea>
我用 jquery 看这个 textarea:
$("#area").keypress(function (e)
if (e.keyCode != 13) return;
var msg = $("#area").val().replace("\n", "");
if (!util.isBlank(msg))
send(msg);
$("#area").val("");
);
send() 如果按下返回键并且消息不是空白或仅包含行空格,则将消息提交给服务器。
问题:发送消息后,textarea没有清空。 在第一页加载时,文本区域为空。提交消息后,textarea中出现一个空白行,我不知道如何摆脱它。
【问题讨论】:
【参考方案1】:问题在于 Enter 按键没有被抑制,并且正在执行其通常的浏览器行为(即添加换行符)。将return false
添加到您的按键处理程序的末尾以防止这种情况发生。
$("#area").keypress(function (e)
if (e.keyCode != 13) return;
var msg = $("#area").val().replace(/\n/g, "");
if (!util.isBlank(msg))
send(msg);
$("#area").val("");
return false;
);
【讨论】:
replace 应该是replace(/\n/g, "");
replace("\n", "") 只会删除第一个新行
@Orlando:那行代码直接来自问题,因此可能仅替换第一个换行符是 OP 的意图,但我同意这不太可能。
要与所有换行符保持一致,最好/(\r?\n|\r\n?)/
。
@AnirudhBalaji:jQuery 的 val()
方法将换行符标准化为 \n
。【参考方案2】:
托马斯,e.preventDefault();将需要包装在仅将其应用于回车键的条件中。
// Restrict ENTER.
if (e.keyCode == '13') e.preventDefault();
整个函数看起来像这样(带注释):
// Key Press Listener Attachment for #area.
$("#area").keypress( function (event)
// If the key code is not associated with the ENTER key...
if (event.keyCode != 13)
// ...exit the function.
return false;
else
// Otherwise prevent the default event.
event.preventDefault();
// Get the message value, stripping any newline characters.
var msg = $("#area").val().replace("\n", "");
// If the message is not blank now...
if (!util.isBlank(msg))
// ...send the message.
send(msg);
// Clear the text area.
$("#area").val("");
);
【讨论】:
【参考方案3】:您需要使用 event.preventDefault() 函数来防止发生默认事件操作,在这种情况下添加输入字符:
$("#area").keypress(function (e)
e.preventDefault();
if (e.keyCode != 13) return;
var msg = $("#area").val().replace("\n", "");
if (!util.isBlank(msg))
send(msg);
$("#area").val("");
);
【讨论】:
那行不通。可以想象,textarea 用于文本输入。如果我阻止默认操作,那么我将无法输入任何内容。以上是关于从 textarea 中删除换行符的主要内容,如果未能解决你的问题,请参考以下文章
使用 Javascript 从 Textarea 中的每个换行符添加数字