我正在尝试在用户输入时在输入值中添加空格,它适用于常量数字,例如4个字母之后或5个字母之后。但是我无法设法在某些数字后动态添加空间。
例如
如果用户键入 1234567890
块: [3,3,4]
预期输出: 123 456 7890
如果用户键入 1234567890
块: [3,2,2,3]
预期输出为: 123 45 67 890
答案 0 :(得分:1)
根据用户类型处理输入可能很棘手。
尽管并不完美,但一种解决方案是计算预期结果,然后将其与当前结果进行比较。如果它们不同,则使用计算出的输入更新实际输入。
下面是一个简单的示例,..它甚至可以处理用户粘贴数字的情况。 下面的一个问题是,如果说您在中间插入数字,则是光标位置,但这可以通过记住光标位置并恢复来解决。
const splits = [3,3,4];
$('#a').on("input", function(){
let count = 0;
const breaks = splits.map(m => { const ret = m + count; count += m; return ret; });
const a = this.value.split("").filter(f => f !== ' ');
const s = a.map((m, ix) => {
if (breaks.includes(ix + 1)) return m + " "
else return m;
}).join("");
if (this.value.trim() !== s.trim()) this.value = s;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="a"/>
答案 1 :(得分:0)
尝试以下代码
function splitValue(value, index) {
return value.substring(0, index) + " " + value.substring(index);
}
var test=[3,3,4];
var secondVar = '';
var firstVar = '1234567890';
for(let i = 0; i < test.length; i++){
var TestVar = splitValue(firstVar, test[i]);
secondVar = secondVar + " " + TestVar.split(" ")[0];
secondVar=secondVar.trim();
if(i == 0)
firstVar = firstVar.replace(secondVar.trim(),'');
else
firstVar = firstVar.replace(secondVar.split(' ')[i + 1],'');
}
console.log(secondVar);