Я не могу понять, почему мой код не работает. Проще говоря, существует три уровня функций: функция доступа для инициирования процесса, функция DOB, которая является ядром программы, и несколько функций, включая функцию PROBLEM, которую я обозначил для идентификации.Функция внутри функции внутри функции, кажется, теряет временные переменные в javascript
Если я запускаю функцию DOB с номерами, которые я вводил напрямую, это работает. Но когда пользователь выбирает номера из выпадающего меню, функция ПРОБЛЕМА в состоянии сбоя. У меня была кнопка jquery go, прежде чем перейти к функции доступа с временными переменными только для получения тех же результатов. Я попытался изменить функцию PROBLEM с помощью переключателей на if-elses для изменения имени, но ничего, что я изменил, работало.
Эта проблема превзошла меня почти неделю. Я новичок в кодировании и обучении, поэтому мне может не хватать какой-то очевидной проблемы определения области или объекта. Любая помощь будет принята с благодарностью. (Код был упрощен, и все ключевые компоненты остались нетронутыми.) ((Кажется, что работает функция Leap Year в функции DOB, нуждающейся в тех же временных переменных.))
Обновление: внесены незначительные изменения. Протестировано много. Проблемная функция остается виновницей, и я не понимаю, почему. Если я ввожу числовые значения, он работает нормально, но он не принимает значения, которые я пытался сохранить из формы.
<!DOCTYPE html>
<html>
<body>
<form id="myForm" class="form">
<p><b> Month</b></p>
<select id="Bmonth" class="date">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
</select>
<p><b>Day</b></p>
<select id="Bdom" class="date">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<p><b>Year</b> </p>
<select id="Byear" class="date">
<option value="2015">2015</option>
<option value="2014">2014</option>
<option value="2013">2013</option>
</select>
<p class="clear">
<input type="button" onclick="access()" value="Submit">
</p>
</form>
<script>
function access() {
var tempElement = document.getElementById("Bmonth");
Bmonth = tempElement.options[tempElement.selectedIndex].value;
var tempElement = document.getElementById("Bdom");
Bdom = tempElement.options[tempElement.selectedIndex].value;
var tempElement = document.getElementById("Byear");
Byear = tempElement.options[tempElement.selectedIndex].value;
return DOB(Bmonth, Bdom, Byear);
}
/*This function determines time intervals
between birth date and current date.*/
function DOB(Bmonth, Bdom, Byear) {
//Get Current Date//
var today = new Date();
var Cmonth = today.getMonth();
var Cdom = today.getDate();
var Cyear = today.getFullYear();
function PROBLEM(Month, DOM) {
switch (Month) {
case 1: return 0 + DOM; break;
case 2: return 31 + DOM; break;
case 3: return 59+ DOM; break;
}
}
/*Find Current and Birth Day of Year
By Calling Function Above */
CDOY = PROBLEM(Cmonth + 1, Cdom);
BDOY = PROBLEM(Bmonth, Bdom);
//Find Differences//
var DayCount = CDOY - BDOY;
var YearCount = Cyear - Byear;
// This function determines the number of leap years//
function Leap(Bmonth, Bdom, Byear, Cmonth, Cyear) {
var LeapYear = 0;
if ((Byear % 4 == 0 && (Byear % 100 !== 0 || Byear % 400 == 0)) &&
(Bmonth >= 3 || Bmonth == 2 && Bdom == 29)) {
LeapYear--;
}
if ((Cyear % 4 == 0 && (Cyear % 100 !== 0 || Cyear % 400 == 0)) &&
Cmonth < 3) {
LeapYear--;
}
for (var i = Cyear; i >= Byear; i--) {
if ((i % 4 == 0) && ((i % 100 !== 0) || (i % 400 == 0)))
{ LeapYear++; };
}
return LeapYear;
}
//Call function above//
var LeapYear = Leap(Bmonth, Bdom, Byear, Cmonth, Cyear);
//Find Total Days//
var TotalDays = 365 * YearCount + DayCount + LeapYear;
//Find Variables//
var Days = TotalDays;
var Hours = Days * 24;
var Minutes = Hours * 60;
var Seconds = Minutes * 60;
var Output, Units;
//Use Random Number Generator to Vary Output with Units//
var random = Math.ceil(Math.random() * 4);
switch (random) {
case 1: Output = Days; Units = 'days old.'; break;
case 2: Output = Hours; Units = 'hours old.'; break;
case 3: Output = Minutes; Units = 'minutes old.'; break;
case 4: Output = Seconds; Units = 'seconds old.'; break;
default: Output = 0; Units = 'units.'; break;
}
var Greeting;
//Use Random Number Generator to Vary Greeting//
var r = Math.ceil(Math.random() * 3);
switch (r) {
case 1: Greeting = 'Congrats!'; break;
case 2: Greeting = 'Yes!'; break;
case 3: Greeting = 'Check it.'; break;
}
function commas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
var Number = commas(Output);
return window.alert(Greeting + "You are " + Number + " " + Units);
}
</script>
</body>
</html>
'case 1: return = 0 + DOM; break; 'все после ключевого слова' return' никогда не будет оценено. Удалите '=' в этих строках. Вы также можете удалить все 'break;' там. – connexo
Это была моя ошибка. Я постоянно обновляю то, что у меня есть. Функция, которую я выполняю, отлично работает при вводе фактических чисел, но она не будет принимать числа, сохраненные в качестве временных переменных из раскрывающегося меню в этой конкретной функции. – CJW