我有一个小问题,基本上我有一个隐藏的输入按钮,它从数据库表中加载了一个唯一值:<input type="hidden" name="ProductId" class="ProductId" value='.$row["ProductId"].' />
此按钮根据通过此方法返回的行数重复:
while ($row = $result->fetch()) {
echo '<table class="cart-row" cellspacing="0" cellpadding="0" width="100%">';
echo '<tbody>';
echo '<tr>';
echo '<td width="75"><img border="0" width="59px" height="78px" title="" alt="" src=' . $row["ImagePath"] .'></td>';
echo '<td width="203"><span class="itemElements itemName">'. $row["Name"] .'</span></td>';
echo '<td width="203"><input type="submit" class="btnMinus linkbtnType2" value="-"><input type="submit" class="btnPlus linkbtnType2" value="+"></td>';
echo '<td width="135"><span class="qtyNum">('. $row["Qty"] .')</span> <br />';
echo '<input type="hidden" name="ProductId" class="ProductId" value='.$row["ProductId"].' />';
echo '<span class="qtyRemoveLink"><input type="submit" class="btnRemove linkbtn" value="Remove"></td>';
echo '<td width="180"><span class="itemElements orderStatus">In Stock Usually dispatched within 24 hours</span></td>';
echo '<td width="175" class="itemPriceRow"><span id="itemPrice">€ '. $row["Price"] .'</span></td>';
echo '</tr>';
echo '</tbody>';
echo '</table>';
echo '<br>';
}
我使用jQuery方法使用隐藏按钮读取此值,但它只是从生成的第一个输入按钮读取值。我尝试将按钮从ID更改为类但没有运气。
这是jQuery方法:
$('.btnRemove').click(function() {
var productId = $(".ProductId").val();
$.ajax({
type: "POST",
url: "functions/deleteCartItem.php",
data: "productId="+productId+ "",
success: function(msg){
alert(msg);
}
})
})
我能想到的一个可能的解决方案是为每个按钮添加一个唯一的id
,这样它们不仅可以通过名称识别,还可以通过id
识别。然而,这在从jQuery方法中读取它时会出现问题。
有什么想法吗?
答案 0 :(得分:1)
尝试:
var productId = $(this).closest('tr').find(".ProductId").val();
this
将$('.btnRemove')
称为DOM元素。
jQuery(this).closest("tr")
我们正在DOM树上搜索第一个tr
元素。
从这里我们搜索.ProductId
。
安德烈亚斯
答案 1 :(得分:1)
您的假设是正确的,因为您正在引用导致问题的类。您的var productId = $(".ProductId").val();
将返回所有.ProductId
元素的数组,val()
将返回第一个元素的值。
要解决此问题,您需要获取.ProductId
元素,该元素与导致click事件的.btnRemove
元素位于同一容器中,如下所示:
$('.btnRemove').click(function() {
var productId = $(this).closest("td").find(".ProductId").val(); // amended selector
$.ajax({
type: "POST",
url: "functions/deleteCartItem.php",
data: "productId="+productId+ "",
success: function(msg){
alert(msg);
}
})
})
答案 2 :(得分:1)
它不会返回正确的值,请尝试类似
的内容var productId = $(this).parent().find(".ProductId").val();
或
var productId = $(this).parent().children(".ProductId").val();
或
var productId = $(this).prev(".ProductId").val();
或
var productId = $(this).siblings(".ProductId").val();
答案 3 :(得分:0)
你应该尝试:
var productId = $(this).closest('tr').find("input[name=ProductId]").val();