我正在尝试正确格式化表单中的邮政编码条目,以便它们在正确的位置有一个空格,这个空格总是离末尾三个字符。例如:
AA1 1AA
a1a1aa
AA11 1AA
A1 1AA
const addSpace = (str, fromEnd) => `${str.slice(0, -1 * fromEnd)} ${str.slice(-1 * fromEnd)}`;
['word', 'longword'].forEach(word => console.log(addSpace(word, 3)));
var el = document.getElementById('input_1_14');
el.addEventListener('keyup', function () {
this.value = addSpace(this.value, 3);
});
然而,如果我在相关字段中键入一系列字符,那么除了从末尾开始的三个字符之外,每隔一个字符就会插入空格,例如:
11 11 11 11
我哪里错了?
由于事件onKeyUp
,您放置了一个额外的字母,它在每个事件后不断添加空格,而不删除它们。
const addSpace = (str, fromEnd) => `${str.slice(0, -1 * fromEnd)} ${str.slice(-1 * fromEnd)}`;
const removeSpace = (str) => str.replace(/ /g, "");
const editString = (str, fromEnd) => addSpace(removeSpace(str), fromEnd);
['word', 'longword'].forEach(word => console.log(editString(word, 3)));
var el = document.getElementById('input_1_14');
el.addEventListener('keyup', function () {
this.value = editString(this.value, 3);
});
<input type="tex" id="input_1_14">
试试这个
function addSpace(str,fromEnd) {
var result ='';
fromEnd += 1;
for (i=0;i<str.length;i++) {
if (i >= str.length - fromEnd) {
result += str[i]+' ';
} else if (str[i] == ' '){
continue;
} else {
result += str[i];
}
}
return result;
}
['word', 'longword'].forEach(word => console.log(addSpace(word, 3)));
var el = document.getElementById('input_1_14');
el.addEventListener('keyup', function () {
this.value = addSpace(this.value, 3);
});
它现在与你的代码完全兼容,只需将其替换为你的代码,它就会工作