替代字符串替换以防止文本框中有多个空格
alternative to string replace to prevent multiple spaces in text box
到目前为止,我一直使用以下方法来防止文本字段中出现多个空格。除非在字符串中间插入字母,否则这工作正常。在此 JSfiddle 演示中,您可以看到,如果单击"a"和"c"之间的光标并键入"b",则会将新字母添加到字符串末尾,拼写为"acb"而不是"abc"。我希望有人可能知道字符串替换的替代方案,这可能会解决这个问题。谢谢。
$('#tBox').bind('DOMAttrModified textInput input change paste',function(){
var sspace = $(this).val().replace(/ +/g, ' ');
$(this).val(sspace);
});
<input type = "text" id = "tBox" />
问题是因为你用 change 事件更新值,这发生在内容更新之前,所以通过将输入值重置为其最新值"ac",光标将自己定位在文本的末尾,然后捕获"b",所以你得到'acb'。
我更新了您的 jsfiddle 以使用 keyup 事件而不是更改事件,并在更新输入内容之前验证文本是否已更改
$('#tBox').bind('DOMAttrModified textInput input keyup paste',function(){
var sspace = $(this).val().replace(/ +/g, ' ');
if ($(this).val() != sspace)
$(this).val(sspace);
});
http://jsfiddle.net/Ubhm9/2/
正在发生的事情是,您的事件在将"b"插入文本字段之前捕获了更改。 即,通过您的 abc/acb 示例,您有事件的顺序:
1) 用户按"B"
2) 事件处理程序运行时,输入值仍以"ac"形式给出。
3) 处理程序将输入的值设置为"ac",将光标移动到输入的末尾
4) 浏览器在光标位置插入"b"字符,现在位于字段的末尾
我唯一能想到做的就是只在需要时做(3),即:
$('#tBox').bind('DOMAttrModified textInput input change paste',function(){
var sspace = this.value.replace(/ +/g, ' ');
if (this.value !== sspace) {
this.value = sspace;
}
});
在输入多个空格时,这仍然会将光标移动到末尾,但这是一个改进。
另外,我摆脱了 $(this).val() 不需要的 jQuery 使用。
相关文章:
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 当没有文本输入聚焦时检测空格键按下
- 如何忽略单词like“”中的未使用空格;测试-文本”;同时构建html标签
- 我想限制用户在jquery中输入文本后面的空格,如果它在文本后面,我会删除空格
- 将空格添加到文本区域
- 从空格分隔的文本创建和实现数组:AngularJS
- 使值为所有空格的文本框无效
- 我如何用空格分解文本,但如果它'It’太长了
- 文本区域字符限制和空格修剪
- 以编程方式触发空格键单击文本区域
- 防止使用 jQuery 在 HTML 文本框中键入空格
- 如何在用户写入文本和按空格后替换表情符号
- 如何在文本节点中保留空格
- 获取标签文本并将其设置为输入值[为什么输入值只获取空格前的文本?
- 删除可内容可编辑属性时删除的文本空格
- 文本之间的空格,但文本前后不空格
- JQuery 字符限制器,同时忽略文本区域中的空格
- 如何单击文本区域,然后使用 jquery 按空格键
- 根据类添加空格以保存文本文件