2017-03-06 6 views
-1

をリフレッシュしません:入力値は、私は[更新]ボタンを持つ買い物かごを持ってcorreclty

enter image description here

私は数量を変更した場合、価格フィールドをリフレッシュする必要があります。

ありボタン、および数量入力フィールドがある:

@if (Model != null) 
      { 
       foreach (var item in Model) 
       { 
        <tr class="bg-danger btnDelete" data-id="1"> 
         <td>@item.Name</td> 
         <td>@item.SupplierNo</td> 
         <td> 
          <input class="form-control quantity" id="quantity" value="1" name="quantity" min="1" max="100" type="number" style="width:100px;" required> 
         </td> 
         <td style="color:red">@item.Price</td> 
         <td class="actions" data-th=""> 
          <button class="btn btn-info btn-sm" onclick="test(this)" id="refreshBasket" [email protected]><i class="fa fa-refresh"></i></button> 
          <button class="btn btn-danger btn-sm" onclick="deleteFromBasket(this)" id="deleteFromBasket" [email protected]><i class="fa fa-trash-o"></i></button> 
         </td> 
        </tr> 
       } 
      } 

これはJavaScript関数である:

<script> 
function test(obj) { 
    var $button = $(obj); 
    var testId = $button.data("id"); //reading the data-id of clicked button 
    var quantity = $('#quantity').val(); 
    var UrlSettings = { 
     url: '@Url.Action("RefreshBasket", "Purchase")' 
    } 

    $.ajax({ 
     url: UrlSettings.url, 
     data: { 'id': testId, 'quantity': quantity }, 
     type: "post", 
     cache: false, 
     success: function (data) { 
      location.reload(); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
     } 
    }); 

} 

これはコントローラである:

public ActionResult RefreshBasket(int id, string quantity) 
    { 
     List<Product> cart = (List<Product>)Session["ShoppingCart"]; 
     Product product = productRepository.GetProductByID(id); 
     if (cart == null) 
     { 
      return new JsonResult() { Data = new { Status = "ERROR" } }; 
     } 

     List<ProductCategoriesVM> cartList = ConvertShoppingCartListToProductCategories(cart); 

     if (product != null) 
     { 
      ProductCategoriesVM item = cartList.Where(p => p.ID == product.Id).FirstOrDefault(); 
      double parsedValue; 
      double.TryParse(item.Price, System.Globalization.NumberStyles.Any, CultureInfo.GetCultureInfo("nl-NL"), out parsedValue); 

      double result = parsedValue * int.Parse(quantity); 
      item.Price = result.ToString("0.00"); 

      var itemFromSession = cart.Where(p => p.Id == item.ID).FirstOrDefault(); 
      itemFromSession.AtpPrice = item.Price; 
     } 

     return View("PurchaseProduct", cartList); 
    } 

問題は、私は買い物リストで変更が時々量値は時々量の値が最後に変更された値のままで、1のままであることです。時々正しく動作します。私は何が間違っているのか分からないのですか?ご覧のとおり、私はこのような値を得ようとします:var quantity = $( '#quantity')。val();これを解決する別の方法がありますか?ありがとう!

答えて

1

あなたの数量値は常に同じ入力からのものなので、 idはそれを切り抜いたので、これを使用してjQueryのコードを変更し、同様に入力のIDを削除したり、作るページ上の各要素に一意である必要があります覚えておいてください:

function test(obj) { 
var $button = $(obj); 
var testId = $button.data("id"); //reading the data-id of clicked button 
var quantity = $button.parents('tr').find('.quantity').val(); 
//or var quantity = $button.closest('tr').find('.quantity').val(); 
var UrlSettings = { 
    url: '@Url.Action("RefreshBasket", "Purchase")' 
} 

$.ajax({ 
    url: UrlSettings.url, 
    data: { 'id': testId, 'quantity': quantity }, 
    type: "post", 
    cache: false, 
    success: function (data) { 
     location.reload(); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
    } 
}); 

}

+0

は、あなたの答えをいただき、ありがとうございます。 obj.closest( 'tr')を使用すると、obj.parentsは関数ではありません。find( '。quantity')。val();私は同じエラーを取得します:obj.closestは関数ではありません。何が問題なのか考えていますか? – Orsi

+0

@Orsi申し訳ありません$ buttonとobjを交換してください –

+1

ありがとうございます!それは完璧に動作します:) – Orsi

関連する問題