Есть функция, которая записывает полученные с формы html документа значения в переменные а и b, в ней на 47й строке консоль выдает ошибку "Uncaught TypeError: Cannot read property 'value' of undefined at HTMLButtonElement" независимо от того вписанно в форму что-либо или нет.
let startSum = document.getElementById('start'),
budgetValue = document.getElementsByClassName('budget-value')[0],
dayBudjetValue = document.getElementsByClassName('daybudjet-value')[0],
levelValue = document.getElementsByClassName('level-value')[0],
expensesValue = document.getElementsByClassName('expenses-value')[0],
optionalExpensesValue = document.getElementsByClassName('optionalexpenses-value')[0],
incomeValue = document.getElementsByClassName('income-value')[0],
monthSavingValue = document.getElementsByClassName('monthsaving-value')[0],
yearSavingValue = document.getElementsByClassName('yearsaving-value')[0],
expensesItem = document.getElementsByClassName('expenses-item'),
expensesItemButton = document.getElementsByTagName("button")[0],
optionalItemButton = document.getElementsByTagName("button")[1],
countItemButton = document.getElementsByTagName("button")[2];
let optionalExpenses = document.querySelectorAll('.optionalexpenses-item'),
chooseIncome = document.querySelector('.choose-income'),
checkSaving = document.querySelector('.saving'),
sum = document.querySelector('.choose-sum'),
percent = document.querySelector('.choose-percent'),
yearValue = document.querySelector('.year-value'),
monthValue = document.querySelector('.month-value'),
dayValue = document.querySelector('.day-value');
let time, money;
startSum.addEventListener('click', function(){
time = prompt ("Введите наду в формате YYYY-MM-DD", '');
money = +prompt ("Ваш бюджет на месяц?", '');
while(isNaN(money) || money == "" || money == null) {
money = +prompt ("Ваш бюджет на месяц?", '');
}
appData.budget = money;
appData.timeData = time;
budgetValue.textContent = money.toFixed();
yearValue.value = new Date(Date.parse(time)).getFullYear();
monthValue.value = new Date(Date.parse(time)).getMonth() + 1;
dayValue.value = new Date(Date.parse(time)).getDate();
});
expensesItemButton.addEventListener('click', function(){
let sum = 0;
for (let i = 0; i < expensesItem.length; i++) {
let a = expensesItem[i].value,
b = expensesItem[++i].value;
if ( (typeof(a)) != null && (typeof(b)) != null && a != '' && b != '' && a.lenght < 50) {
console.log ("done");
appData.expenses[a] = b;
sum += +b;
} else {
i = i - 1;
}
}
expensesValue.textContent = sum;
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link href="https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700&subset=cyrillic" rel="stylesheet">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="app">
<div class="logo">
<span>money</span>
keeper
</div>
<div class="title">
Расчет дневного бюджета
</div>
<div class="main">
<div class="data">
<div class="choose-expenses">Введите обязательные расходы</div>
<input class="expenses-item" type="text" id="expenses_1" placeholder="Наименование">
<input class="expenses-item" type="text" id="expenses_2" placeholder="Цена">
<input class="expenses-item" type="text" id="expenses_3" placeholder="Наименование">
<input class="expenses-item" type="text" id="expenses_4" placeholder="Цена">
<button class="expenses-item-btn">Утвердить</button>
<div class="optionalexpenses">Введите необязательные расходы</div>
<input class="optionalexpenses-item" type="text" id="optionalexpenses_1">
<input class="optionalexpenses-item" type="text" id="optionalexpenses_2">
<input class="optionalexpenses-item" type="text" id="optionalexpenses_3">
<button class="optionalexpenses-btn">Утвердить</button>
<div class="count-budget">Расчет дневного бюджета</div>
<button class="count-budget-btn">Рассчитать</button>
<div class="choose-income-label">Введите статьи возможного дохода через запятую</div>
<input class="choose-income" type="text" id="income">
<div class="checksavings">Есть ли накопления:
<input id="savings" type="checkbox" />
</div>
<label for="sum">Сумма</label>
<input class="choose-sum" id="sum" type="text">
<label for="percent">Процент</label>
<input class="choose-percent" id="percent" type="text">
<div class="open">
<button class="start" id="start">Начать расчет</button>
</div>
</div>
<div class="result">
<div class="result-table">
<div class="budget">Доход: </div>
<div class="budget-value"></div>
<div class="daybudget">Бюджет на 1 день: </div>
<div class="daybudget-value"></div>
<div class="level">Уровень дохода: </div>
<div class="level-value"></div>
<div class="expenses">Обязательные расходы: </div>
<div class="expenses-value"></div>
<div class="optionalexpenses">Возможные траты: </div>
<div class="optionalexpenses-value"></div>
<div class="income">Дополнительный доход: </div>
<div class="income-value"></div>
<div class="monthsavings">Накопления за 1 месяц:</div>
<div class="monthsavings-value"></div>
<div class="yearsavings">Накопления за 1 год:</div>
<div class="yearsavings-value"></div>
</div>
<div class="time-data">
<div class="year">
Год:
<input class="year-value" type="text" readonly>
</div>
<div class="month">
Месяц:
<input class="month-value" type="text" readonly>
</div>
<div class="day">
День:
<input class="day-value" type="text" readonly>
</div>
</div>
</div>
</div>
</div>
<script src="js/main.js"></script>
</body>
</html>
for (let i = 0; i < expensesItem.length - 1; i++) {
let a = expensesItem[i].value,
b = expensesItem[++i].value;
...
... a.length < 50) {
Вот это - (typeof(a)) != null
- что делает?
var a = null;
console.log((typeof(a)) != null );
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Решил отказаться от Ajax и все взаимодействие с сервером провожу через вебсокеты
Доброе время суток! Вопрос вот в чем : Есть ТАБы(кнопки) при нажатии на каждый из которых добавляется класс active, на кокой ТАБ нажал, тому и добавился...
Собственно как заставить PJAX сделать запрос на сервер и обновить страницу без перезагрузки не нажимая на ссылкуПробовал следующее