Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止文本区域中重复空格_Javascript_Html_Input_Textarea - Fatal编程技术网

Javascript 如何防止文本区域中重复空格

Javascript 如何防止文本区域中重复空格,javascript,html,input,textarea,Javascript,Html,Input,Textarea,我试图阻止用户在文本区域中输入重复空格。一行中的任何空格,我只希望textarea忽略 我试图简单地在我的onchange处理程序中用一个空格替换repeats,方法是:value.replace(/\s+//g') 这确实有效,但是插入符号总是移动到文本区域的末尾。因此,如果我把插入符号放在文本的中间,并按两次空间,插入符号移动到文本的末尾,这对用户来说是烦人的。 我发现我可以在onkeypress处理程序中使用event.preventDefault(),它不会移动光标,但是,onkeypr

我试图阻止用户在文本区域中输入重复空格。一行中的任何空格,我只希望textarea忽略

我试图简单地在我的
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我看到您更新了答案,并且新代码工作正常:)