#javascript #input
Вопрос:
Я установил тип ввода «число» и теперь хочу применить к нему некоторые проверки. Я хочу запретить запуск функции (после нажатия кнопки), если ввод содержит» «, » — » или «e».
const countBtn = document.getElementById("forge-points-btn");
function quantityHandler() {
let userInput = document.querySelector(".forge-points-input").value;
if(userInput.split("").includes("e") || userInput.split("").includes("-")) {
return;
}
// else code
}
<input type="number" class="forge-points-input" id="forge-points-input"></input>
<button type="button" id="forge-points-btn">Count</button>
Но, к моему удивлению, это не работает, потому что при вводе минус, плюс или «e», например «321-51″, » e -» и т. Д., Это userInput
равно пустой строке. Однако при вводе «-55» userInput
отображается правильное значение. Почему это происходит? Я пытаюсь понять, почему это решение не может сработать. Я видел другие решения на этом форуме, но все же хотел бы понять, почему это не может сработать.
Комментарии:
1.
e
означает экспоненциальные значения ?
Ответ №1:
В документации MDN говорится:
<input type="number">
элементы автоматически делают недействительной любую запись, которая не является числом (или пустой, еслиrequired
не указано иное).
Вы можете убедиться в этом сами: предоставление значения, которое не является числом, автоматически делает поле недействительным.
<p>Equations are not numbers.</p>
<input type="text" id="text-input" value="123-456">
<input type="number" id="number-input" value="123-456">
<p>Signed numbers are numbers.</p>
<input type="number" id="number-input" value="-123">
<input type="number" id="number-input" value=" 123">
<p>Exponents are numbers.</p>
<input type="number" id="exponent-input" value="10e5">
Если вы хотите запретить
, -
, и e
в вашем input[type=number]
случае ваш подход верен. Однако вы также должны убедиться, что входные данные действительны.
if (!userInput?.length || userInput.includes("e") || ...)
(Обратите внимание, вам это не нужно .split("")
, так как JavaScript может принудить a number
перейти в a string
.)
Комментарии:
1. Спасибо вам за ваш ответ! Кстати, вы научили меня, как учиться, мне нужно чаще проверять документацию, когда у меня возникают проблемы. Я использовал
.split()
метод, так как думал, что он может быть применен только к массивам, но, как я вижу, он работает и со строками 🙂