Функция для изменения окончания слов в зависимости от числа в Javascript [закрыт]

190
18 декабря 2019, 15:40
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Update the question so it's on-topic for Stack Overflow на русском.

Закрыт 9 месяцев назад.

Русский - это не мой родной язык, но постараюсь высказаться.

В упражнении HTML и Javascript, я создал коробку <input/>и кнопку для ввода числа. Нажав кнопку ввести, абзац <p> должен бы показать введённое число и слово "пользователь" в соответствующем падеже, в зависимости от последней цифры. (...)1 пользователь, (...)2 пользователя, (...)5 пользователей, и т.д., за исключением чисел 11-14 (-ей).

Вот моя функция, которая пока не работает:

function func_num() { 
  var num, result; 
  num = Number(document.getElementById("users_number").value); 
 
  var string = num.toString(); 
  var lastChar = string.charAt(string.length - 1); 
 
  if (isNaN(num)) { 
    result = "Ввод не состоит из цифр."; 
  } else if (lastChar == "1" && !(num == 11)) { 
    result = num + " пользователь в сети."; 
  } else if (lastChar == "2" && !(num == 12)) { 
    result = num + " пользователя в сети."; 
  } else if (lastChar == "3" && !(num == 13)) { 
    result = num + " пользователя в сети."; 
 
    else if (lastChar == "4" && !(num == 14)) { 
      result = num + " пользователя в сети."; 
    } else { 
      result = num + " пользователей в сети."; 
    } 
 
    document.getElementById("demo").innerHTML = result; 
  }
<input id="users_number" /> 
<button onclick="func_num()">Ввести</button> 
<p id="demo"></p>

Не умею найти, что неправильно. Если честно, механизм работает когда переменная num - статическое число. Например, num = 24, без коробки input и без сосуда функции для переменных и условий: страница HTML производит ожидаемый результат, с числом изменяемым в редакторе HTML, из которого следует склонённое слово "пользователь". Но когда стараюсь вернуть интерактивность переменной num, заключённой в функции - num = Number.document(getElementbyId("users_number").value) - то функция не работает. Печатаю число в коробку input, могу нажать кнопку "Ввести", но ожидаемый текст "xx ползовател.ь/я/ей" не появляется.

Вот результат статического числа:

Можете вы мне помочь? Заранее спасибо.

Answer 1

Используйте какой-либо отладчик, например Chrome DevTools, доступный в браузере Chrome по кнопке F12.

В вашем примере отсутствует } перед строкой else if (lastChar == "4" && !(num == 14)) {

В остальном он работает. Еще удобный сайт для моделирования - с Вашим примером - jsfiddle.net

Answer 2

function enumerate (num, dec) { 
    if (num > 100) num = num % 100; 
    if (num <= 20 && num >= 10) return dec[2]; 
    if (num > 20) num = num % 10; 
    return num === 1 ? dec[0] : num > 1 && num < 5 ? dec[1] : dec[2]; 
} 
 
document.getElementById("form").onsubmit = function () { 
  let count = +document.getElementById("input").value; 
  document.getElementById("users").innerHTML = count + " " + enumerate(count, ["пользователь", "пользователя", "пользователей"]) + " в сети"; 
  return false 
}
<form id="form"> 
  <input id="input"> 
  <button>Ввод</button> 
</form> 
<div id="users"></div>

READ ALSO
JS - запись/захват системного звука

JS - запись/захват системного звука

Современные браузеры позволяют давать доступ, и соответственно вести запись:

180
VUE JS localStorage

VUE JS localStorage

Имею проект с функциями редактирования полей внутри массива объектов, сохранения, удаления, добавления новых полейХотелось бы подключить...

187
Как узнать текущий размер стека функций в памяти, для лучшего контроля внутри кода?

Как узнать текущий размер стека функций в памяти, для лучшего контроля внутри кода?

Работаю над оптимизацией кода, и столкнулся в ходе оптимизации с переполнением стекаИ ситуация такова, что даже вызов procces

187