Функция не может иметь то же имя, что и ранее существовавшее свойство. ссылка
Когда вы создаете форму, вы получаете сгенерированный объект DOM HTML-формы, и каждый вход в этой форме является дочерним элементом.
Когда вы создаете вход и добавляете атрибут имени, он фактически создает свойство, которое называется значением атрибута имени входного файла, и к нему можно получить доступ, используя его так:
formObject.inputAttributeNameValue
Пример:
var theForm = document.getElementById("the_form");
console.log(theForm.total);
<form id="the_form">
<div>
<div>
<label>Total Price(in USD)</label>
<input type="text" name="total" readonly="" class="form-control" min="1" placeholder="Total Price" id="totalPrice">
</div>
</div>
</form>
Таким образом, вы должны избегать конфликтов между именами функций и именами свойств.
В противном случае выдаст ошибку TypeError: <functionName> is not a function
.
Вы заметите, что я изменил событие на oninput
, которое происходит при изменении входного значения, поэтому общая цена будет рассчитываться при любом изменении, даже при изменении значения с помощью счетчика, а не только после события onkeyup
:
//note: function needs to be unique compared to inputs' name values
function totalPriceCalculated() {
a = Number(document.getElementById('qty').value);
b = Number(document.getElementById('amount').value);
c = a * b;
document.getElementById('totalPrice').value = c;
}
<form>
<div>
<label>Part Quantity</label>
<input type="number" name="quantity" class="form-control" placeholder="Part Quantity" min="1" id="qty" oninput="totalPriceCalculated()">
</div>
<div>
<label>Part Price</label>
<input type="number" name="price" class="form-control" min="1" placeholder="Part Price" id="amount" oninput="totalPriceCalculated()">
</div>
<div>
<label>Total Price(in USD)</label>
<input type="text" name="total" readonly="" class="form-control" min="1" placeholder="Total Price" id="totalPrice">
</div>
<div class="col-lg-12 col-md-12 col-xs-12 col-sm-12 order-btn">
<button type="submit" class="btn btn-danger pull-right" name="order">
Order Now
</button>
</div>
</form>
Подробнее об ошибке, вызванной тем, что функция разделяет имя с уже существующим свойством:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Not_a_function#Function_shares_a_name_with_a_pre-existing_property
Примечание: Будьте осторожны с размещением функций в вашем HTML и области видимости. Он должен быть расположен непосредственно внутри <head>
или внизу, перед закрытием тега </body>
, но не внутри window.onload