Ставьте тире после каждого n символа во время ввода с клавиатуры и редактируйте точное число

Я нашел этот учебник от здесь. Он будет выглядеть так: 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" />

Пожалуйста, четко обозначьте проблему, с которой вы столкнулись. Что не работает? Вы можете привести пример?

31piy 14.08.2018 06:57

Этот код полностью работает, но когда я пытаюсь отредактировать любое число, он работает некорректно. Предположим, у меня есть число вроде «75-354-55444-54-54324», теперь я хочу удалить 7, используя backspace, и добавить 2 на место 7. Это здесь не работает.

Anondi 14.08.2018 07:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На самом деле проблема в том, что, насколько я понимаю, строка переформатируется, когда вы где-то удаляете число, плюс курсор перескакивает в конец. Это затрудняет выполнение быстрых и значимых правок.

Я предлагаю использовать ключи ловушка 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" />

Другие вопросы по теме