Я нашел этот учебник от здесь. Он будет выглядеть так: 35-354-55444-54-54324 .. Он работает нормально, но когда я пытаюсь отредактировать любой код, он работает неправильно. Когда я нажимаю клавишу возврата, он автоматически принимает номер. Вот мой код:
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" />Этот код полностью работает, но когда я пытаюсь отредактировать любое число, он работает некорректно. Предположим, у меня есть число вроде «75-354-55444-54-54324», теперь я хочу удалить 7, используя backspace, и добавить 2 на место 7. Это здесь не работает.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


На самом деле проблема в том, что, насколько я понимаю, строка переформатируется, когда вы где-то удаляете число, плюс курсор перескакивает в конец. Это затрудняет выполнение быстрых и значимых правок.
Я предлагаю использовать ключи ловушка 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" />
Пожалуйста, четко обозначьте проблему, с которой вы столкнулись. Что не работает? Вы можете привести пример?