从键盘输入期间在每 n 个字符后加上破折号并编辑确切数字
put dash after every n character during input from keyboard and edit exact number
我从 找到了这个教程。它看起来像 this:35-354-55444-54-54324..它工作正常但是当我尝试编辑任何代码时它不工作correctly.when 我按退格键它会自动 number.Here 是我的代码:
function format(input, format, sep) {
var output = "";
var idx = 0;
for (var i = 0; i < format.length && idx < input.length; i++) {
output += input.substr(idx, format[i]);
if (idx + format[i] < input.length) output += sep;
idx += format[i];
}
output += input.substr(idx);
return output;
}
$('.creditCardText').keyup(function() {
var foo = $(this).val().replace(/-/g, ""); // remove hyphens
// You may want to remove all non-digits here
// var foo = $(this).val().replace(/\D/g, "");
if (foo.length > 0) {
foo = format(foo, [2, 3, 5, 2, 5], "-");
}
$(this).val(foo);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="creditCardText" maxlength="21" />
实际问题是,据我了解,当您在某处删除数字时,字符串会重新格式化,而且光标会跳到末尾。这使得难以进行快速且有意义的编辑。
我建议使用 trap the backspace
和 delete
键,在这种情况下跳过字符串重新格式化过程。这可能有副作用,但应该适合您的需要。
function format(input, format, sep) {
var output = "";
var idx = 0;
for (var i = 0; i < format.length && idx < input.length; i++) {
output += input.substr(idx, format[i]);
if (idx + format[i] < input.length) output += sep;
idx += format[i];
}
output += input.substr(idx);
return output;
}
$('.customerNumberText').keyup(function(e) {
if(e.keyCode == 8 //alert('backspace')
|| e.keyCode == 46) //alert('delete')
return;
var foo = $(this).val().replace(/-/g, ""); // remove hyphens
// You may want to remove all non-digits here
// var foo = $(this).val().replace(/\D/g, "");
if (foo.length > 0) {
foo = format(foo, [2, 3, 5, 2, 5], "-");
}
$(this).val(foo);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="customerNumberText" maxlength="21" />
我从
function format(input, format, sep) {
var output = "";
var idx = 0;
for (var i = 0; i < format.length && idx < input.length; i++) {
output += input.substr(idx, format[i]);
if (idx + format[i] < input.length) output += sep;
idx += format[i];
}
output += input.substr(idx);
return output;
}
$('.creditCardText').keyup(function() {
var foo = $(this).val().replace(/-/g, ""); // remove hyphens
// You may want to remove all non-digits here
// var foo = $(this).val().replace(/\D/g, "");
if (foo.length > 0) {
foo = format(foo, [2, 3, 5, 2, 5], "-");
}
$(this).val(foo);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="creditCardText" maxlength="21" />
实际问题是,据我了解,当您在某处删除数字时,字符串会重新格式化,而且光标会跳到末尾。这使得难以进行快速且有意义的编辑。
我建议使用 trap the backspace
和 delete
键,在这种情况下跳过字符串重新格式化过程。这可能有副作用,但应该适合您的需要。
function format(input, format, sep) {
var output = "";
var idx = 0;
for (var i = 0; i < format.length && idx < input.length; i++) {
output += input.substr(idx, format[i]);
if (idx + format[i] < input.length) output += sep;
idx += format[i];
}
output += input.substr(idx);
return output;
}
$('.customerNumberText').keyup(function(e) {
if(e.keyCode == 8 //alert('backspace')
|| e.keyCode == 46) //alert('delete')
return;
var foo = $(this).val().replace(/-/g, ""); // remove hyphens
// You may want to remove all non-digits here
// var foo = $(this).val().replace(/\D/g, "");
if (foo.length > 0) {
foo = format(foo, [2, 3, 5, 2, 5], "-");
}
$(this).val(foo);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="customerNumberText" maxlength="21" />