Почему функции возвращаются не определены?

Я работаю с формой и использую функции для создания возвратов, которые затем будут использоваться для полного расчета в конце формы.

Есть две функции, которые возвращаются undefined и я не смог понять, почему. Я считаю, что я правильно обращаюсь к элементам формы. Я проверил ключи массива с помощью журнала консоли и получил действительные номера.

Любая помощь будет большой. Я включаю HTML и внешний скрипт.

HTML

<title>Square Foot Form</title>
 
 


 <div id="wrap"><code>&lt;form action="" id="sqfoot" onsubmit="return false;"&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;fieldset&gt;
 &lt;legend&gt;Calculate Your Rental Rate&lt;/legend&gt;
 &lt;label&gt; How many plants do you want to grow ? &lt;/label&gt;
 &lt;select size="1" &lt;select="" id="plantNumber" name="plantNumber" onchange="getNumberOfPlants();"&gt;
 &lt;option value="None"&gt;Select number of plants&lt;/option&gt;
 &lt;option value="1"&gt; 1&lt;/option&gt;
 &lt;option value="2"&gt; 2&lt;/option&gt;
 &lt;option value="3"&gt; 3&lt;/option&gt;
 &lt;option value="4"&gt; 4&lt;/option&gt;
 &lt;option value="5"&gt; 5&lt;/option&gt;
 &lt;option value="6"&gt; 6&lt;/option&gt;
 &lt;option value="7"&gt; 7&lt;/option&gt;
 &lt;option value="8"&gt; 8&lt;/option&gt;
 &lt;option value="9"&gt; 9&lt;/option&gt;
 &lt;option value="10"&gt;10&lt;/option&gt;
 &lt;option value="11"&gt;11&lt;/option&gt;
 &lt;option value="12"&gt;12&lt;/option&gt;
 &lt;option value="13"&gt;13&lt;/option&gt;
 &lt;option value="14"&gt;14&lt;/option&gt;
 &lt;option value="15"&gt;15&lt;/option&gt;
 &lt;option value="16"&gt;16&lt;/option&gt;
 &lt;option value="17"&gt;17&lt;/option&gt;
 &lt;option value="18"&gt;18&lt;/option&gt;
 &lt;option value="19"&gt;19&lt;/option&gt;
 &lt;option value="20"&gt;20&lt;/option&gt;
 &lt;option value="21"&gt;21&lt;/option&gt;
 &lt;option value="22"&gt;22&lt;/option&gt;
 &lt;option value="23"&gt;23&lt;/option&gt;
 &lt;option value="24"&gt;24&lt;/option&gt;
 &lt;option value="25"&gt;25&lt;/option&gt;

 &lt;/select&gt;
 &lt;label&gt; What size plants are you starting with ? &lt;/label&gt;

 &lt;label&gt;Seeds, havn't started yet&lt;/label&gt;
 &lt;label&gt; Seedlings, less than 2ft high&lt;/label&gt;
 &lt;label&gt; Juvenile, 2 - 4ft high&lt;/label&gt;
 &lt;label&gt; Adult, 4ft or higher&lt;/label&gt;&lt;label&gt; Grow Type &lt;/label&gt;

 &lt;select id="Grow_Type" name="Grow_Type" onchange="getGrowType();"&gt;
 &lt;option value="None"&gt;Select Grow Type&lt;/option&gt;
 &lt;option value="15"&gt;Traditional soil based&lt;/option&gt;
 &lt;option value="21"&gt;Hydroponic&lt;/option&gt;
 &lt;option value="None"&gt; Undecided&lt;/option&gt;

 &lt;/select&gt;
 &lt;label&gt; Choose Set-up &lt;/label&gt;

 &lt;label&gt;Our Grow Set Up&lt;/label&gt;
 &lt;label&gt;Your Grow Set Up&lt;/label&gt;


 &lt;div id="totalPrice"&gt;
 &lt;!-- &lt;input type="button" id="myButton" name="totalButton" value="Calculate" onclick="claculateTotal();"&gt; --&gt;
 &lt;/div&gt;

 &lt;/fieldset&gt;
 &lt;/div&gt;


 
 &lt;/div&gt;&lt;/form&gt;&lt;!--End of wrap--&gt;</code> <p> JS:</p> <pre class="prettyprint linenums">var num_plant= new Array();
 num_plant ["none"] = 0;
 num_plant [1] = 1;
 num_plant [2] = 2;
 num_plant [3] = 3;
 num_plant [4] = 4;
 num_plant [5] = 5;
 num_plant [6] = 6;
 num_plant [7] = 7;
 num_plant [8] = 8;
 num_plant [9] = 9;
 num_plant [10] = 10;
 num_plant [11] = 11;
 num_plant [12] = 12;
 num_plant [13] = 13;
 num_plant [14] = 14;
 num_plant [15] = 15;
 num_plant [16] = 16;
 num_plant [17] = 17;
 num_plant [18] = 18;
 num_plant [19] = 19;
 num_plant [20] = 20;
 num_plant [21] = 21;
 num_plant [22] = 22;
 num_plant [23] = 23;
 num_plant [24] = 24;
 num_plant [25] = 25;


 var square_inches = new Array();
 square_inches ["seeds"]=16;
 square_inches ["seedlings"]=16;
 square_inches ["juveniles"]=64;
 square_inches ["adult"]=144;

var type_grow = new Array();
 type_grow ["select"] =0;
 type_grow ["traditional"] =15;
 type_grow ["hydroponic"] =21;
 type_grow ["undecided"] =0;

var set_up = new Array();
 set_up ["our"] =10;
 set_up ["your"] =5;


function getNumberOfPlants()
{
 var userNumberChoice=0; 
 var theForm = document.forms["sqfoot"]; 
 var selectedPlantNum = theForm.elements["plantNumber"]; 
 userNumberChoice = num_plant[selectedPlantNum.value]; 
 return userNumberChoice; 
}

function getSquareInches()
{ 
 var thePlantSize=0; 
 var theForm = document.forms["sqfoot"]; 
 var selectedPlant = theForm.elements["plantType"]; 
 for(var i = 0; i < selectedPlant.length; i++)
 { 
 if(selectedPlant[i].checked)
 { 
 thePlantSize = square_inches[selectedPlant[i].value]; 
 break;
 }
 } 
 return thePlantSize;
}

function calculateSquareFeet()
{ 
 return (getNumberOfPlants() * getSquareInches()) / 144; 
}

function getGrowType()
{
 var userGrowChoice=0; 
 var theForm = document.forms["sqfoot"]; 
 var selectedGrowType = theForm.elements["Grow_Type"]; 
 userGrowChoice = type_grow[selectedGrowType.value]; 
 return userGrowChoice;
}

function areaTimesType()
{
 return calculateSquareFeet() * getGrowType();
}

function getSetUp()
{ 
 var theSetUpChoice=0; 
 var theForm = document.forms["sqfoot"]; 
 var selectedSetUp = theForm.elements["SetUp"]; 
 for(var j = 0; j < selectedSetUp.length; j++)
 { 
 if(selectedSetUp[j].checked)
 { 
 theSetUpChoice = set_up[selectedSetUp[j].value]; 
 break;
 }
 } 
 return theSetUpChoice;
}

function calculateTotal()
{ 
 var theWholeThing = areaTimesType() + getSetUp(); 
 var divobj = document.getElementById('totalPrice');
 divobj.style.display='block';
 divobj.innerHTML = "Total Price For grow space $"+theWholeThing;
}
1 ответ

выяснили свою проблему, заключается в том, что в ваших выпадающих меню и радиокнопках вы отправляете фактические числа в массив не фактическое слово, в то время как ваши определенные массивы основаны на словах

т.е.

square_inches ["seeds"]=16;

но в вашей функции вы просили

square_inches [16]

поэтому вы становитесь неопределенным. Все, что вам нужно сделать, это изменить значения переключателей и выпадающего типа роста

здесь работает скрипка

http://jsfiddle.net/7mn5a/1/

здесь скрипка с предупреждениями о ваших значениях, когда вы выберете радиокнопку или измените раскрывающийся тип роста

http://jsfiddle.net/7mn5a/2/

licensed under cc by-sa 3.0 with attribution.