Javascript 如何防止文本区域中重复空格
我试图阻止用户在文本区域中输入重复空格。一行中的任何空格,我只希望textarea忽略 我试图简单地在我的Javascript 如何防止文本区域中重复空格,javascript,html,input,textarea,Javascript,Html,Input,Textarea,我试图阻止用户在文本区域中输入重复空格。一行中的任何空格,我只希望textarea忽略 我试图简单地在我的onchange处理程序中用一个空格替换repeats,方法是:value.replace(/\s+//g') 这确实有效,但是插入符号总是移动到文本区域的末尾。因此,如果我把插入符号放在文本的中间,并按两次空间,插入符号移动到文本的末尾,这对用户来说是烦人的。 我发现我可以在onkeypress处理程序中使用event.preventDefault(),它不会移动光标,但是,onkeypr
onchange
处理程序中用一个空格替换repeats,方法是:value.replace(/\s+//g')
这确实有效,但是插入符号总是移动到文本区域的末尾。因此,如果我把插入符号放在文本的中间,并按两次空间,插入符号移动到文本的末尾,这对用户来说是烦人的。
我发现我可以在onkeypress
处理程序中使用event.preventDefault()
,它不会移动光标,但是,onkeypress
不提供输入的新值,因此我不知道是否有重复空格
有什么办法吗?您可以将textarea值从开头切到插入符号位置,也可以从插入符号切到结尾,然后替换这两部分,检查第一部分的长度,将它们放在一起,并将光标设置为选中的长度:
const textarea=document.querySelector('textarea');
textarea.addEventListener('input',()=>{
常量{value}=textarea;
const position=textarea.selectionStart;
常量p1=值。切片(0,位置)。替换(/\s+/g');
常量p2=值。切片(位置)。替换(/\s+/g');
常量p2Fixed=p1.endsWith(“”)和&p2.startsWith(“”)?p2.replace(/^\s+/,“”):p2;
textarea.value=p1+P2固定值;
textarea.selectionStart=p1.length;
textarea.selectionEnd=p1.length;
});代码>
foo bar baz,尝试在此处添加更多空间
我也考虑过手动移动插入符号,但我希望有更好的方法。但是无论如何,您的示例代码不能正常工作。例如,键入狗
,然后将插入符号放在e
后面,然后按空格键。它仍然允许双空格。Edit-nevermind我看到您更新了答案,并且新代码工作正常:)