Хотите улучшить этот вопрос? 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 ползовател.ь/я/ей" не появляется.
Вот результат статического числа:
Можете вы мне помочь? Заранее спасибо.
Используйте какой-либо отладчик, например Chrome DevTools, доступный в браузере Chrome по кнопке F12.
В вашем примере отсутствует } перед строкой else if (lastChar == "4" && !(num == 14)) {
В остальном он работает. Еще удобный сайт для моделирования - с Вашим примером - jsfiddle.net
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>
Продвижение своими сайтами как стратегия роста и независимости