我正在开发一个电子商务网站,我也是新手。
我编写了一个java脚本来增加单击按钮时文本框中显示的数字。
我从数据库中获取行并将div
标记放入while循环中。
div
标签包含菜肴名称,菜肴类型,价格,显示数量的文本框,两个按钮用于增加菜肴的数量,另一个用于减少菜肴的数量。
按钮显示在每个div标签上,因为每个div标签显示菜肴的信息。
因此,当我点击第二道菜或第三道菜的div上的按钮标签时,它会增加第一个div的值,而不是增加相应标签的值。帮助我!
<script type="text/javascript">
function increase(){
var x = document.getElementById("quantity").value;
x++;
document.getElementById("quantity").value = x;
var y = document.getElementById("price").value;
var z = y * x;
document.getElementById("price").value = z;
}
</script>
&#13;
<%
while(resultSet.next()) {
%>
<div class="box box-primary">
<!-- attackment block-->
<div class="attachment-block clearfix">
<!-- col -->
<div class="col-md-6 pull-left">
<img class="attachment-img" src="../dist/img/photo1.png" alt="Attachment Image">
<div class="attachment-pushed box-tools">
<h4 class="attachment-heading"><a href="dishItemList.jsp"> ⁠ <%= resultSet.getString(2) %> |
⁠ <%= resultSet.getString(5) %> | ⁠ <span data-toggle="tooltip" title="Vegeterian Dish" class="label label-success">Veg</span></a></h4>
<div class="attachment-text">
<h4>
<i class="fa fa-rupee"></i> ⁠ <%= resultSet.getInt(3) %>
</h4>
<strong> Rating : 4.1 </strong>
</div>
<!-- /.attachment-text -->
</div>
<!-- /.attachment-pushed -->
</div>
<!--/col-->
<!--col-->
<div class="col-md-6 pull-right">
<button type="button" class="btn btn-primary btn-box-tool pull-right" onclick="increase()"><i class="fa fa-plus"></i></button>
<div class="col-xs-3 pull-right">
<input type="text" id="quantity" class="form-control input-sm" value="<%= resultSet.getInt(3) %>">
</div>
<button type="button" class="btn btn-primary btn-box-tool pull-right"><i class="fa fa-minus"></i></button>
<br>
<br>
<div class="input-group pull-right col-sm-3">
<span class="input-group-addon"> <i class="fa fa-rupee"></i> </span>
<input type="text" id="price" class="form-control" value="<%= resultSet.getInt(3) %>" disabled>
</div>
</div>
<!--/col-->
</div>
<!-- /.attachment-block -->
</div>
<% }
connection.close();
%>
&#13;
答案 0 :(得分:1)
所以你犯的错误是,如果你循环几个东西并硬编码id,几个元素得到相同的id,这就是你的increase()函数正在更新&#34;错误&#34的原因;元件。
所以你需要给循环中的每个项目一个唯一的id。一种方法是将resultSet中的id附加到HTML元素的id。
<div class="col-md-6 pull-right">
<button type="button" class="btn btn-primary btn-box-tool pull-right" onclick="increase()">
<i class="fa fa-plus"></i>
</button>
<div class="col-xs-3 pull-right">
<input type="text" id="quantity<%= resultSet.id %>" class="form-control input-sm" value="<%= resultSet.getInt(3) %>" onchange="increase('quantity<%= resultSet.id %>', 'price<%= resultSet.id %>', 'baseprice<%= resultSet.id %>')">
</div>
<button type="button" class="btn btn-primary btn-box-tool pull-right">
<i class="fa fa-minus"></i>
</button>
<br>
<br>
<div class="input-group pull-right col-sm-3">
<span class="input-group-addon">
<i class="fa fa-rupee"></i>
</span>
<input type="hidden" id="baseprice<%= resultSet.id %>" value="<%= resultSet.getInt(3) %>">
<input type="text" id="price<%= resultSet.id %>" class="form-control" value="<%= resultSet.getInt(3) %>" disabled>
</div>
</div>
当更改数量时,onchange应该触发,并且该函数现在接收一对具有唯一ID的特定字段。然后,该功能只需要进行数学运算并进行更新。
<script type="text/javascript">
function increase(qelement, pelement, bpelement){
document.getElementById(qelement).value += 1;
var dishQuantity = document.getElementById(qelement).value;
var basePrice = document.getElementById(bpelement).value;
document.getElementById(pelement).value *= dishQuantity;
}
</script>
只是增加数量字段的值,并将基本价格乘以新数量。
这不是复制/粘贴解决方案。可能有一些JavaScript问题,因为我经常使用jQuery。这只是实现您尝试的一种方式的粗略模型。有更优雅的方式,但这可能是最快的工作。一旦完成,您应该以此为契机,详细了解JavaScript如何与DOM交互,甚至可能与eventListeners交互。