如何只在 table 中为选定的行调用函数 JS?
How to call function JS for selected row only in table?
我正在尝试仅增加第二行的数量,但增加的是第一行而不是第二行?!
这是我的代码 Html 我的 table :
<table class="table">
<thead>
<tr>
<th class="">Item Name</th>
<th class="">Item Price</th>
<th class="">Quantité</th>
<th class="">Actions</th>
</tr>
</thead>
@foreach(var item in @Model.panierWebs) {
<tbody>
<tr class="">
<td class="">
<div class="product-info">
<img width="80" src="@Url.Content(item.Image)" alt="" />
<a href="#!"> @Html.DisplayFor(modelItem => item.Model) </a>
</div>
</td>
<td class=""> @Html.DisplayFor(modelItem => item.Prix) DA</td>
<td class="">
<div class="quantity buttons_added">
<input onclick="decrement(@item.Prix,@item.Qte)" type="button" value="-" class="minus"><input type="number" name="quantity" id="qte" value="@item.Qte" title="Qty" class="input-text qty text" pattern="" inputmode=""><input onclick="increment(@item.Prix,@item.Qte)"
type="button" value="+" class="plus">
</div>
</td>
<td class="">
<a onclick="remove(@item.Id)" class="product-remove" href="#!">Remove</a>
</td>
</tr>
</tbody>
}
</table>
和我的递增和递减Qte Script JS :
function decrement(prix, qte) {
console.log("qte avant dec" + document.getElementById("qte").value);
if (parseInt(document.getElementById("qte").value) != 1) {
qte = parseInt(document.getElementById("qte").value) - 1; // increment qte
console.log("qte apres dec" + qte);
$("#qte").val(qte); // affecter la nouvelle valeur de qte
var currenttotal = document.getElementById("total").value; // calculer le nouveau total
var newtotal = parseFloat(currenttotal) - parseFloat(prix);
$("#total").val(newtotal);
}
}
function increment(prix, qte) {
console.log("qte avant incr" + document.getElementById("qte").value);
if (parseInt(document.getElementById("qte").value) <= 5) {
qte = parseInt(document.getElementById("qte").value) + 1; // increment qte
console.log("qte apres incr" + qte);
$("#qte").val(qte); // affecter la nouvelle valeur de qte
var currenttotal = document.getElementById("total").value; // calculer le nouveau total
var newtotal = parseFloat(currenttotal) + parseFloat(prix);
$("#total").val(newtotal);
}
}
首先,解决一些问题:
- 您必须避免在 DOM 中使用重复的标识符。您可以使用 class 并使用 classes 而不是 ids。
- 此外,您的 foreach 中有 tbody,使您的 table 有很多 tbody。您必须将 tbody 标签放在 foreach
之外
解决问题的方法是使用调用函数的具体标记(+ 和 - 按钮)。为此,请将参数“this”添加到您的函数中。 “this”是您点击的输入按钮
<input onclick="decrement(this,@item.Prix,@item.Qte)" ...>
<input type="number" ...>
<input onclick="increment(this,@item.Prix,@item.Qte)" ...>
并稍微修改一下您的函数:
function increment(input, prix, qte) {
var number = $(input).closest("div").find("input[type=number]")
var inputVal = parseInt(number.val());
if (inputVal <= 5) {
qte = inputVal + 1; // increment qte
console.log("qte apres incr" + qte);
number.val(qte); // affecter la nouvelle valeur de qte
// ... your total part
}
}
$(input).closest("div") 为您提供包含按钮和文本框的 div。在那个 div 中,您搜索 type=number 的输入(文本框),获取它的值并完成工作
我正在尝试仅增加第二行的数量,但增加的是第一行而不是第二行?!
这是我的代码 Html 我的 table :
<table class="table">
<thead>
<tr>
<th class="">Item Name</th>
<th class="">Item Price</th>
<th class="">Quantité</th>
<th class="">Actions</th>
</tr>
</thead>
@foreach(var item in @Model.panierWebs) {
<tbody>
<tr class="">
<td class="">
<div class="product-info">
<img width="80" src="@Url.Content(item.Image)" alt="" />
<a href="#!"> @Html.DisplayFor(modelItem => item.Model) </a>
</div>
</td>
<td class=""> @Html.DisplayFor(modelItem => item.Prix) DA</td>
<td class="">
<div class="quantity buttons_added">
<input onclick="decrement(@item.Prix,@item.Qte)" type="button" value="-" class="minus"><input type="number" name="quantity" id="qte" value="@item.Qte" title="Qty" class="input-text qty text" pattern="" inputmode=""><input onclick="increment(@item.Prix,@item.Qte)"
type="button" value="+" class="plus">
</div>
</td>
<td class="">
<a onclick="remove(@item.Id)" class="product-remove" href="#!">Remove</a>
</td>
</tr>
</tbody>
}
</table>
和我的递增和递减Qte Script JS :
function decrement(prix, qte) {
console.log("qte avant dec" + document.getElementById("qte").value);
if (parseInt(document.getElementById("qte").value) != 1) {
qte = parseInt(document.getElementById("qte").value) - 1; // increment qte
console.log("qte apres dec" + qte);
$("#qte").val(qte); // affecter la nouvelle valeur de qte
var currenttotal = document.getElementById("total").value; // calculer le nouveau total
var newtotal = parseFloat(currenttotal) - parseFloat(prix);
$("#total").val(newtotal);
}
}
function increment(prix, qte) {
console.log("qte avant incr" + document.getElementById("qte").value);
if (parseInt(document.getElementById("qte").value) <= 5) {
qte = parseInt(document.getElementById("qte").value) + 1; // increment qte
console.log("qte apres incr" + qte);
$("#qte").val(qte); // affecter la nouvelle valeur de qte
var currenttotal = document.getElementById("total").value; // calculer le nouveau total
var newtotal = parseFloat(currenttotal) + parseFloat(prix);
$("#total").val(newtotal);
}
}
首先,解决一些问题:
- 您必须避免在 DOM 中使用重复的标识符。您可以使用 class 并使用 classes 而不是 ids。
- 此外,您的 foreach 中有 tbody,使您的 table 有很多 tbody。您必须将 tbody 标签放在 foreach 之外
解决问题的方法是使用调用函数的具体标记(+ 和 - 按钮)。为此,请将参数“this”添加到您的函数中。 “this”是您点击的输入按钮
<input onclick="decrement(this,@item.Prix,@item.Qte)" ...>
<input type="number" ...>
<input onclick="increment(this,@item.Prix,@item.Qte)" ...>
并稍微修改一下您的函数:
function increment(input, prix, qte) {
var number = $(input).closest("div").find("input[type=number]")
var inputVal = parseInt(number.val());
if (inputVal <= 5) {
qte = inputVal + 1; // increment qte
console.log("qte apres incr" + qte);
number.val(qte); // affecter la nouvelle valeur de qte
// ... your total part
}
}
$(input).closest("div") 为您提供包含按钮和文本框的 div。在那个 div 中,您搜索 type=number 的输入(文本框),获取它的值并完成工作