2013-03-31 1 views
0

Im javascript beginner, но я построил простой Оценщик затрат для моего сайта, используя математические функции Javascript.JavaScript - рассчитать флажок ТОЛЬКО при проверке

function calc(form) { 
    a = eval(form.a.value) 
    b = eval(form.b.value) 
    c = eval(form.c.value) 
    x = a*(b+c) 
    form.ans.value = parseFloat(x).toFixed(2); 
} 

Форма проста:

<form name="formx"> 
    <label for="a">Number of Units :</label> 
    <input type="number" size=3 value=0 name="a"> 
    <label for="b">Price per Unit :</label> 
    <select name="b"> 
     <option value="0.04">0.04</option> 
     <option value="0.05">0.05</option> 
     <option value="0.06">0.06</option> 
    </select> 
    <label for="c">Tick if Urgent</label> 
    <input name="c" type="checkbox" value="0.01" /> 
    <input class="button" type="button" value=" CALCULATE " onClick="calc(this.form)"> 
    <label for="ans">Total Cost :</label> 
    <input value=" £ " name="ans" size=6> 
</form> 

«с» значение, для срочной службы, составляет 0,01, но он должен быть добавлен ТОЛЬКО когда флажок установлен, в противном случае его значение Должно быть 0. Но я не могу понять, потому что он всегда добавляет значение «c» как 0,01, проверяется или не проверяется.

Пожалуйста, помогите

+1

Зачем использовать 'eval()'? – Antony

ответ

4

Попробуйте this-

function calc(form) { 
    var a = parseFloat(form.a.value) 
    var b = parseFloat(form.b.value) 
    var c = (form.c.checked) ? parseFloat(form.c.value) : 0; 
    var x=a*(b+c) 
    form.ans.value=parseFloat(x).toFixed(2); 
} 

Примечание -

eval зло

С сайта Дугласа Крокфорд в - JavaScript Code conventions

Функция eval является самой неправильной функцией JavaScript. Избегай это.

eval имеет псевдонимы. Не используйте конструктор Function. Не передавайте строки в setTimeout или setInterval.

Кроме того, читайте this-

0

Рассмотрим с помощью радио кнопок вместо флажков. Тогда вы можете иметь несколько значений, связанных с одним объектом. См. http://www.w3schools.com/html/html_forms.asp для точных различий.