2

基本的に、データベース テーブルから一意の値が読み込まれる非表示の入力ボタンがあります。<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 メソッドから読み取る際に問題を引き起こします。

何か案は?

4

4 に答える 4

1

試す :

var productId = $(this).closest('tr').find(".ProductId").val();

this$('.btnRemove')DOM要素と呼ばれます。

jQuery(this).closest("tr")tr最初の要素を探してDOMツリーを上っていきます。

ここからを検索し.ProductIdます。

アンドレアス

于 2011-12-22T09:21:03.603 に答える
1

問題の原因となっているクラスで参照しているためであるというあなたの仮定は正しいです。var productId = $(".ProductId").val();すべての.ProductId要素の配列を返しval()、これらの最初の値のみを返します。

これを修正するには、次のように、クリック イベントを発生させ.ProductIdた要素と同じコンテナにある要素を取得する必要があります。.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);
        }
    })
})
于 2011-12-22T09:23:32.290 に答える
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();

フィドル: http://jsfiddle.net/fwM3T/

于 2011-12-22T09:25:06.560 に答える
0

試してみてください:

 var productId = $(this).closest('tr').find("input[name=ProductId]").val();
于 2011-12-22T09:24:43.050 に答える