2013-03-26 2 views
0

Не совсем уверен, что я сделал не так. Но мои две мои ошибки не отображаются, nPrice и nAmount. Однако отображается мое имя и nSmokes. Я думаю, что это имеет какое-то отношение к многократному условию if else, которое я использую.Сообщения об ошибках, которые не отображаются для проверки формы Javascript

Мне очень хотелось бы получить ваши мысли.

Заранее спасибо.

function doValidate() 
{ 

//alert("Working"); 

document.myForm.nPrice.value=parseFloat(document.myForm.nPrice.value); 
document.myForm.nAmount.value=parseInt(document.myForm.nAmount.value); 
document.myForm.nSmokes.value=parseInt(document.myForm.nSmokes.value); 

//alert(document.myForm.nPrice.value); 

//alert(document.myForm.nAmount.value); 

//alert(document.myForm.nSmokes.value); 



errorCount = 0; 
errorMsg = "" 

if(document.myForm.name.value == "") { 

     errorMsg = errorMsg + "You need to enter a value!"; 
     document.getElementById('errors').innerHTML= errorMsg; 
     errorCount++; 

} 

if (document.myForm.nPrice.value < 0 && document.myForm.nPrice.value > 20.00) { 

     errorMsg = errorMsg + "You need to enter a value between 0 and 20!"; 
     document.getElementById('errors').innerHTML= errorMsg; 
     errorCount++; 
} 

if (document.myForm.nAmount.value < 0 && document.myForm.nAmount.value > 40) { 

     errorMsg = errorMsg + "You need to enter a value between 0 and 40!"; 
     document.getElementById('errors').innerHTML= errorMsg; 
     errorCount++; 
} 
if (document.myForm.nSmokes.value < 0) { 

     errorMsg = errorMsg + "<br/>Either your doing a great job or you put in that you  smoked 0 today!"; 
     document.getElementById('errors').innerHTML= errorMsg; 
     errorCount++; 
} 

if (errorCount > 0) { 
     return false; 
} else { 
     return true; 
} 
} 

HTML

<form name="myForm" method="post" id="myForm" onsubmit="return doValidate();"> 

    <table width="600" border="1" cellspacing="4" cellpadding="4"> 
    <tr> 
    <td colspan="2" align="center"><img src="quitSmoking.jpg" width="278"/></td> 
    </tr> 
    <tr> 
    <td colspan="2" align="center">Quit Smoking Calculator by Your Name</td> 
    </tr> 
    <tr> 
    <td>Your Name</td> 
    <td><input type="text" name="name" id="name" />&nbsp;</td> 
    </tr> 
    <tr> 
    <td>Date you Quit</td> 
    <td><input name="startDate" type="text"> 
    <input type="button" value="select" onclick="displayDatePicker('startDate');">&nbsp;</td> 
    </tr> 
    <tr> 
     <td>Price of a pack</td> 
     <td><input type="text" name="nPrice" id="nPrice" value="8.00" />&nbsp;</td> 
    </tr> 
     <tr> 
     <td>How many in a pack</td> 
     <td><input type="text" name="nAmount" id="nAmount" value="20" />&nbsp;</td> 
    </tr> 
    <tr> 
     <td>Number of cigarettes you smoked a day</td> 
     <td><input type="text" name="nSmokes" id="nSmokes" value="25" />&nbsp;</td> 
    </tr> 
    <tr> 
     <td colspan="2" align="center"><input type="submit" name="btnSubmit" id="btnSubmit" value="Calculate Savings" /></td> 
    </tr> 
    <tr> 
     <td colspan="2" align="center"><div id="errors"></div></td> 
    </tr> 
    <tr> 
     <td id="rowResult" colspan="2" align="center"> 
     <input type="hidden" name="nResult" id="nResult" value="" /> 
     &nbsp;</td> 
    </tr> 
    </table> 

    </form> 
+0

'document.myForm.nPrice.value = parseFloat (document.myForm.nPrice.value); document.myForm.nAmount.value = parseInt (document.myForm.nAmount.value); document.myForm.nSmokes.value = parseInt (document.myForm.nSmokes.value); 'в вашем коде ничего не делает. Элементы DOM не содержат тип данных - вам нужно поместить его в переменную Javascript для хранения типа. –

ответ

3
document.myForm.nPrice.value < 0 && document.myForm.nPrice.value > 20.00 

Как значение может быть ниже 0 и больше, чем 20? Вы ищете ИЛИ там.

document.myForm.nPrice.value < 0 || document.myForm.nPrice.value > 20.00 

или от 0 до 20

document.myForm.nPrice.value > 0 && document.myForm.nPrice.value < 20.00 

подобная ошибка вы сделали для второй, если выражение тоже.

+0

Правильно! Еще новичок в кодировании. Я понимаю, почему это не имеет смысла. OR должен работать. –

+0

Спасибо. Оно работает! –

0

Эта линия не будет работать, как вы думаете:

document.myForm.nSmokes.value = parseInt(document.myForm.nSmokes.value); 

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

var nSmokes = parseInt(document.myForm.nSmokes.value); 

Затем использовать это что-то вроде этого:

if (nSmokes < 0) { 

Кроме того, у Вас есть ошибка в вашей логике, как вы используете (AND) оператор &&, а не (OR) оператор || , что будет иметь больше смысла.

+0

Спасибо за интерес к этому вопросу. Я действительно спецификации: где Цена пакета - это число с плавающей точкой больше нуля и меньше 20, а количество сигарет в пакете - целое число больше 0 и меньше 40. Для моей ошибки работать должно быть меньше 0 и больше 40. Поэтому, если пользователь вводит 50, например, он получит ошибку. Если бы это было выражено противоположным, это подтвердило бы, не так ли? –

+0

Nevermind. Виноват. Спасибо за помощь. –