#javascript #html
Вопрос:
у меня возникла проблема с использованием цикла for для суммирования значений через элементы внутри HTML нажатием кнопки, но код работал неправильно, также я пытался показать оповещение о массаже, в котором говорится «не число«, но каждый раз показываю один и тот же массаж, как только я нажимаю кнопку
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input class="inp" type="" placeholder="Enter a Number " >
<input class="inp" type="" placeholder="Enter elec" >
<input class="inp" type="" placeholder="Enter food " >
<input class="inp" type="" placeholder="Enter car " >
<input class="inp" type="" placeholder="Enter resturent " >
<h1 class="total">total</h1>
<button class="btn">calculate</button>
<script
const btn= document.querySelector('.btn')
const total = document.querySelector('.total')
const inp = document.querySelectorAll('.inp')
btn.addEventListener('click',function(){
if (isNaN(inp.value)) {
alert("Not a number")
console.log(inp.value);
} if (inp.value === ""){
alert("enter number ")
}
for (let i = 0; i <inp.length; i ) {
let index = 0
const current = index inp[i].value
total.innerHTML = index
}
})
</script>
</body>
</html>
Комментарии:
1. «пусть индекс = 0» должен быть перед циклом.
2. Тип ввода по умолчанию-текст. Преобразуйте их в числа, если вы хотите использовать их для расчета, в противном случае isNaN всегда будет возвращать значение true
3. Кроме того, inp будет содержать коллекцию элементов DOM, поэтому, если вы хотите проверить значение, вам придется выполнить итерацию через inp.
4. в качестве дополнительного замечания, имеет очень мало смысла, чтобы классы в основном отображались на соответствующий тег.
<button class="primary">
в этом всегда будет гораздо больше смысла<button class="btn">
…5. Вот один из способов: jsfiddle.net/52atj3f4
Ответ №1:
Переключитесь на ввод type=number
. Также проверьте typeof
, является ли переменная числом. Если нет, вы можете преобразовать его с помощью функции JavaScript parseInt()
.
Ответ №2:
Пожалуйста, измените тип ваших входных данных, затем переместите «проверку» внутри цикла, затем переместите счетчик за пределы цикла и измените его на «пусть», затем приведите к номеру входное значение перед суммированием в текущее.
хорошего дня
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input class="inp" type="number" placeholder="Enter a Number ">
<input class="inp" type="number" placeholder="Enter elec">
<input class="inp" type="number" placeholder="Enter food ">
<input class="inp" type="number" placeholder="Enter car ">
<input class="inp" type="number" placeholder="Enter resturent ">
<h1 class="total">total</h1>
<button class="btn">calculate</button>
<script>
let btn = document.querySelector('.btn')
btn.addEventListener('click', function () {
const total = document.querySelector('.total')
const inps = document.querySelectorAll('.inp')
let current = 0;
for (let i = 0; i < inps.length; i ) {
if (isNaN(inps[i].value)) {
alert("Not a number")
break;
} if (inps[i].value == "") {
alert("enter number ")
break;
}
current = inps[i].value
total.innerHTML = current
}
})
</script>
</body>
</html>