Почему строка не сохраняет значение?

235
19 ноября 2018, 12:50

Пытаюсь сделать свое поле набора номера телефона. Вроде, все правильно, но когда я манипулирую со строкой. Её значение почему-то не изменяется. В чём проблема? Может из-за локальной области видимости? Не знаю.

var 
  phone = "+7(___)___-__-__", 
  currentID = 3, 
  input = jQuery('input[name="feedback__phone"]'); 
 
 
input.keyup(function(e) { 
  if (e.keyCode == 8) { //Если нажат backspace 
    phone[currentID] = "_"; 
    if (currentID == 7 || currentID == 11 || currentID == 14) { 
      currentID -= 2; 
    } else if (currentID > 3) { 
      currentID--; 
    } 
  } else if (e.keyCode < 58 && e.keyCode > 47) { //Если нажаты цифры 
    phone[currentID] = String.fromCharCode(e.keyCode); 
 
    if (currentID == 5 || currentID == 9 || currentID == 12) { 
      currentID += 2; 
    } else if (currentID != 15) { 
      currentID++; 
    } 
  } 
 
  input.val(phone); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<input name="feedback__phone" />

Answer 1

Строки в js неизменяемые - это означает, что нельзя присвоить отдельный символ строки.

Одно из решений, например:

  1. сделать из строки массив: var phoneArr = phone.split('')
  2. заменить Нужный символ: phoneArr[currentID] = char
  3. объединить массив, и переписать начальную переменную: phone = phoneArr.join('')

Первый шаг можно опустить, если хранить в phone - сразу массив и приводить его к строке в момент передачи в input.val(...)

READ ALSO
Блок с текстом уходит влево

Блок с текстом уходит влево

Вот детище моё: https://drivegoogle

212
Потеря контекста вызова

Потеря контекста вызова

Объясните, пожалуйста, почему после присвоения var f = obj1f теряется контекст вызова и выводится undefined?

254