我正在尝试制作一个类似电子商务的网页(用于练习),其中点击任何按钮都会通过输入元素中指定的数量更新购物车价值。
到目前为止,我只能从第一个表单更新购物车,因为当我尝试使用循环在每个表单上分配函数时,购物车会在一毫秒内更新,然后返回零。我认为这是因为作用域的原因。
我知道有一种更简单的方法可以做到这一点,而不必为每个
document.forms[n]
手动分配函数。
JS代码:
window.onload = function()
{
var getForm = document.forms[0];
var numItems = 0;
getForm.onsubmit = function(event)
{
event.preventDefault();
var getInput = getForm.elements["num-item"].value;
if(parseInt(getInput))
{
numItems = numItems + parseInt(getInput);
var getCart = document.getElementById("item-count");
getCart.innerHTML = numItems;
getForm.reset();
}
else
{
alert("Please enter a valid number");
}
}
HTML 购物车:
<div class="basket">
<p><i class="fa fa-shopping-basket"></i></p>
<p id="item-count">0</p>
</div>
HTML表单:为简洁起见,我只发布了一个表单示例,但实际上,我还有6个完全相同的表单。
<div class="buy-config">
<form class="buy-form" name="buy-form">
<label>Quantity:</label>
<input type="text" class="num-item" />
<button class="buy-btn">Add to Cart</button>
</form>
</div>
var getInput = this.getElementsByClassName("num-item")[0].value;
中[0]
是什么意思?我猜它不是当前索引,否则你会使用i
。那么这行代码到底是做什么的? - CharissegetElementsByClassName
总是 返回一个元素集合,即使该集合只有一个元素(因为您可以拥有多个具有相同类的元素)。 您无法读取整个集合的value
属性--因此,您需要仅获取集合的第一个元素(或查找其他确保获取正确元素的方法),并获取该特定元素的value
属性。 - Woodrow Barlow